我正在为Android 4.0.3 (ICS)版本编写应用程序。问题是,在BroadcastReceiver的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");
}
}
}
};
registerReceiver(brMediaButton, mediaButtonFilter);
我真正需要测试的只是KEYCODE_HEADSETHOOK,但同时也包括其他代码以进行测试,一旦我能够正确运行所有内容,我会加以修复。
在我的清单文件中:
<intent-filter android:priority="2147483647" >
<action android:name="android.intent.action.MEDIA_BUTTON" />
</intent-filter>
一开始我以为这可能是一个权限问题,因为我没有为此指定任何权限,但是我没有收到任何错误消息。
像我之前说的,我已经尝试了很多变化。其中一个例子是使用这个链接中的代码broadcastreceiver onReceive problem ACTION_MEDIA_BUTTON Android 和CommonsWare的修正。然而,我对它进行了修改,所以它不是在一个单独的类中。
提前感谢您的帮助。