8

我正在使用 ACTION_MEDIA_BUTTON 处理程序做一个应用程序,但它似乎总是被 MX Player 或 Apollo 拦截,我没有得到任何意图

我已经尝试在标签中设置 1000 和 2147483647 优先级,并且直接在构造函数之后使用 setPriority

应用程序在没有 MX Player 或 Apollo 时运行

我也尝试过使用 Google Play 中的 Headset Interceptor 应用程序,我尝试使用 Autostarts 应用程序拒绝 MX Player 的事件 - 没有任何帮助

在 onCreate 中:

IntentFilter filter = new IntentFilter(Intent.ACTION_MEDIA_BUTTON);
filter.addAction(Intent.ACTION_HEADSET_PLUG);
filter.setPriority(1000);
registerReceiver(receiver, filter);

在接收器

@Override
public void onReceive(Context context, Intent intent) {
    if (Intent.ACTION_MEDIA_BUTTON.equals(intent.getAction())) {
        // NEVER REACHES HERE WHEN MX PLAYER PRESENT. WORKS IF NOT

在清单中

<receiver
    android:name="BCreceiver"
    android:enabled="true">
    <intent-filter android:priority="1000">
        <action android:name="android.intent.action.MEDIA_BUTTON" />
        <action android:name="android.intent.action.HEADSET_PLUG" />
    </intent-filter>
</receiver>
4

4 回答 4

15

请参阅以下链接中的“值必须大于 -1000 且小于 1000。 ”行,最高优先级是 999 而不是 1000。

http://developer.android.com/guide/topics/manifest/intent-filter-element.html

于 2014-12-26T06:47:26.150 回答
3

尽管这是一个有点老的问题,但我正在添加我的发现,以便对新访问者有所帮助。

不需要从代码接收 Intent.ACTION_MEDIA_BUTTON 广播注册意图。文档说意图必须在清单中注册。无法通过从代码注册使其正常工作。

利用registerMediaButtonEventReceiver

android:priority="<int value>"在清单作品中设置优先级。我使用了 2147483647,甚至能够覆盖股票播放器。我读过winamp正在使用最高优先级。

希望这可以帮助。

于 2016-05-15T10:20:31.283 回答
2

要捕获耳机按钮,还应在活动中的 onCreate 中在媒体中注册接收器

AudioManager manager = (AudioManager) getSystemService(AUDIO_SERVICE);
manager.registerMediaButtonEventReceiver(new ComponentName(getPackageName(), BCreceiver.class.getName()));
于 2013-09-11T12:01:48.750 回答
1

首先,如果清单中已经提到了接收器,则不应在代码中注册接收器。然后,接收者的名称无效,它应该是一个完整的类名,或者是简写,它将附加到应用程序包名称中。如果 ifBCreceiver位于主包中,则属性值应为".BCreceiver". 最后提到的是你不应该真正改变优先级,在Android中没有拦截广播(据我所知)这样的事情,所以所有BroadcastReceivers订阅的动作都会在它被触发时收到广播。尝试这些修复并更新您的问题。

于 2013-09-11T07:11:34.733 回答