没有清单的ACTION_MEDIA_BUTTON广播接收器意图过滤器不起作用

时间:2016-06-02 12:16:08

标签: android android-intent broadcastreceiver intentfilter

对于我的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编写的,以保持兼容性。但随着音量变化的发挥作用,我并不知道为什么媒体按钮没有。谢谢你的帮助。

0 个答案:

没有答案