对于我的Android音频播放器应用程序,我设置了一个BroadcastReceiver类来获取媒体按钮事件。它接收" android.media.VOLUME_CHANGED_ACTION"广播,但没有" Intent.ACTION_MEDIA_BUTTON"广播。
使用Manifest文件中的Intent过滤器可以正常工作。但是我不想使用Manifest条目,因为应用程序应该只在按下按钮时才会响应。我还读到这里不需要Manifest。
Intent过滤器在Activity:
中动态设置$data[$i]->questions
ButtonReceiver只会在音量变化事件上调用,而不是在MEDIA BUTTON操作中调用:
public static myButtonReceiver receiver = new myButtonReceiver();
private void registerBroadcastReceiver() {
IntentFilter mediaFilter = new IntentFilter(Intent.ACTION_MEDIA_BUTTON);
mediaFilter.addAction("android.media.VOLUME_CHANGED_ACTION");
mediaFilter.addAction("android.intent.action.MEDIA_BUTTON");
mediaFilter.setPriority(2147483647);
registerReceiver(receiver, mediaFilter);
}
我也尝试使用AudioManager,但它也无效。
public class myButtonReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if ((intent.getAction().equals("android.media.VOLUME_CHANGED_ACTION")) {
// Volume button things...
abortBroadcast();
return;
}
KeyEvent event = (KeyEvent)intent.getParcelableExtra(Intent.EXTRA_KEY_EVENT);
if (event == null)
return;
if (event.getAction() == KeyEvent.ACTION_DOWN) {
if ((event.getKeyCode() == KeyEvent.KEYCODE_HEADSETHOOK)
|| (event.getKeyCode() == KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE)
|| (event.getKeyCode() == 127)) { // 127 = KEYCODE_MEDIA_PAUSE
// Stop/Play things...
}
abortBroadcast();
}
}
}
该应用程序是针对旧Android 2.2编写的,以保持兼容性。但随着音量变化的发挥作用,我并不知道为什么媒体按钮没有。谢谢你的帮助。