相关疑难解决方法(0)

BroadcastReceiver for ACTION_MEDIA_BUTTON无效

我正在为Android OS 4.0.3(ICS)编写一个Android应用程序.问题是我没有从BroadcastReceive的onReceive()方法获取Log.d()的输出,这意味着我的应用程序没有正确处理广播.

我已经阅读了关于如何在单击ACTION_MEDIA_BUTTON时运行代码的无数问题.当我的工作不起作用时,我甚至复制+粘贴代码,只是为了看看它是否可行.

我想要处理的ACTION_MEDIA_BUTTON是耳机上的单个按钮,允许用户接听/结束通话,播放/暂停音乐.当我点击它时,而不是我的应用程序处理此按钮,我的Nexus S Android上的股票音乐播放器开始播放一首歌曲.

我没有将我的代码放在另一个类中,也许这就是为什么它不起作用?

这是在onCreate()方法上找到的代码(这个特定的代码是在我编写的代码无效后从网站上复制的):

IntentFilter mediaButtonFilter = new IntentFilter(
            Intent.ACTION_MEDIA_BUTTON);
    mediaButtonFilter.setPriority(IntentFilter.SYSTEM_HIGH_PRIORITY);
    BroadcastReceiver brMediaButton = new BroadcastReceiver() {
        public void onReceive(Context context, Intent intent) {
            Log.d("Event", "Media button!");
            this.abortBroadcast();

            KeyEvent key = (KeyEvent) intent.getParcelableExtra(Intent.EXTRA_KEY_EVENT);
            if(key.getAction() == KeyEvent.ACTION_UP) {
                int keycode = key.getKeyCode();
                if(keycode == KeyEvent.KEYCODE_MEDIA_NEXT) {
                    Log.d("TestApp", "Next Pressed");
                } else if(keycode == KeyEvent.KEYCODE_MEDIA_PREVIOUS) {
                    Log.d("TestApp", "Previous pressed");
                } else if(keycode == KeyEvent.KEYCODE_HEADSETHOOK) {
                    Log.d("TestApp", "Head Set Hook pressed");
                }
            }

        } …
Run Code Online (Sandbox Code Playgroud)

java android broadcastreceiver android-intent

18
推荐指数
1
解决办法
2万
查看次数

如何使用android从蓝牙耳机捕获关键事件

我的应用程序可以通过普通耳机控制.它只是覆盖"onKeyDown".但是没有捕获蓝牙耳机的关键事件 - 为什么?或者如何捕获蓝牙键事件?

如果我按下耳机上的按钮,"log cat"会显示以下内容:

Bluetooth AT recv(3043): AT+VGS=15
AudioPolicyManagerBase(13654): FM radio recording off
AudioService(2261): sendVolumeUpdate, isKeyguardLocked...Not to update Volume Panel.
VolumePanel(2261): change volume by MSG_VOLUME_CHANGED
VolumePanel(2261): onVolumeChanged(streamType: 6, flags: 0)
VolumePanel(2261): Call setChangeSeekbarColor(false)
Run Code Online (Sandbox Code Playgroud)

我也尝试处理媒体按钮操作,但这不起作用.我的想法是一个免费的可配置键映射:用户选择"设置键"我的应用程序听到所有键(硬件,媒体按钮,蓝牙耳机),然后用户按下一个键,事件/密钥代码存储在配置中.

总结不工作的答案: 音量按钮必须由"VOLUME_CHANGED_ACTION"捕获.问题是这个意图被广播到其他应用程序并且abortBroadcast()不起作用(它仅适用于"有序"广播).另一个问题是有线耳机和手机上的按键触发onReceive()两次(为什么?)蓝牙耳机会触发一次.下一个问题是蓝牙耳机上的第3个键.它触发语音命令(s-s在s3上启动),我试图捕获许多不同的意图,但我不能"接收"这个按钮按下而不知道为什么.最后,我希望捕获各种按钮,并且不希望它们由其他应用程序处理(例如使用onKeyDown并返回true).

android bluetooth android-bluetooth

17
推荐指数
2
解决办法
3万
查看次数

如何通过音频插孔检测输入数据?

我知道有些设备的耳机端口(可能都是这些?这里的任何参考都很好)有3个声道,用于立体声和麦克风.所以我想知道是否有可能在这些设备上检测到这样的踏板.

如果可能的话,使用录音机就足够了吗?我正在研究应用程序的可能性,如果可能的话,这听起来很有希望.

谢谢

编辑

我正在寻找更多关于它的信息,我想知道踏板是否会与带按钮的耳机具有相同的效果.覆盖它们的效果是致命的,我创建了一个简单的应用程序来完成它,现在我正在等待我的踏板尝试.有什么想法吗?

UPDATE

我只是在踏板上尝试过它并没有用.虽然我们设法使用踏板暂停音乐应用程序.该设备正在运行Cyanogen.录音机也没有在按键上检测到任何东西.需要有关如何检测它的建议:).

UPDATE

随着赏金即将到期,一个小小的更新.@ Nick.T提供的最后一个链接得到了一些有用的信息,但我仍然无法创建一个样本来检测踏板.所以我对标题问题进行了一些小改动,对此方向的任何指导都将非常感谢!

audio android microphone

11
推荐指数
1
解决办法
9400
查看次数

想要捕获蓝牙耳机的按键

现在,我只想显示一个“按下按钮”!当我在配对的蓝牙耳机(LG HBM-770)上按任意按钮(音量或通话按钮)时出现提示信息。我在这里尝试了确切的方法(这是我正在使用的代码):Android-在BroadcastReceiver注册耳机按钮单击没有任何运气,包括建议的修复方法。谷歌搜索时间仅指向该类型的代码。清单中启用了蓝牙权限。

如果我现在按通话按钮,它似乎永远不会进入我的应用程序,而是显示菜单,要求您选择处理该应用程序的应用程序(语音搜索,谷歌语音等)。如果我按住蓝牙通话按钮,则手机会拨打上次拨打的电话。如果我尝试用ACTION_POWER_DISCONNECTED替换Intent过滤器类型,则在断开电源时它可以正常工作,因此从那时开始,该代码似乎正常工作。

如果我根本不使用任何过滤器,那会很高兴,只是弹出一个Toast,显示收到的ANY动作的ID,所以我知道手机上的按钮究竟是什么样子。

android bluetooth

5
推荐指数
1
解决办法
2080
查看次数

3
推荐指数
1
解决办法
3076
查看次数

如何在Android onMediaButtonEvent中收听"ACTION_DOWN"(按下键)事件,以便测量时间?

我试着花时间System.currentTimeMillis(),而不是用户按下媒体按钮.但回调是在媒体按钮再次上升时执行的action == KeyEvent.ACTION_UP.

我不想在我的解决方案中使用BroadcastReceiver.

这是我的代码:

    MediaSession audioSession = new MediaSession(getApplicationContext(), "TAG");
    audioSession.setCallback(new MediaSession.Callback() {

        @Override
        public boolean onMediaButtonEvent(final Intent mediaButtonIntent) {
            String intentAction = mediaButtonIntent.getAction();

            if (Intent.ACTION_MEDIA_BUTTON.equals(intentAction))
            {
                KeyEvent event = (KeyEvent)mediaButtonIntent.getParcelableExtra(Intent.EXTRA_KEY_EVENT);
                if (event != null)
                {
                    int action = event.getAction();
                    if (action == KeyEvent.ACTION_DOWN) {
                        long stopTimeOfGame_millis = System.currentTimeMillis();
                        UtilsRG.info("time stopped: " +stopTimeOfGame_millis);

                    }
                    if (action == KeyEvent.ACTION_UP) {
                         long test = System.currentTimeMillis();
                         UtilsRG.info("time stopped up: " +test);

                    }
                }

            }
            return super.onMediaButtonEvent(mediaButtonIntent);
        }



    }); …
Run Code Online (Sandbox Code Playgroud)

java android

1
推荐指数
1
解决办法
5021
查看次数