我正在使用ACTION_MEDIA_BUTTON处理程序进行应用程序,但看起来它总是被MX Player或Apollo拦截而我没有意图
我已尝试在标记中设置1000和2147483647优先级,并在构造函数后直接使用setPriority
当没有MX Player或Apollo存在时,应用程序可以运行
我也试过使用谷歌播放的Headset Interceptor应用程序,我试图用自动启动应用程序拒绝事件到MX Player - 没什么帮助
在onCreate中:
IntentFilter filter = new IntentFilter(Intent.ACTION_MEDIA_BUTTON);
filter.addAction(Intent.ACTION_HEADSET_PLUG);
filter.setPriority(1000);
registerReceiver(receiver, filter);
在Receiver中
@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>
答案 0 :(得分:13)
请参阅以下链接中的“值必须大于-1000且小于1000。”,最高优先级为999而不是1000.
http://developer.android.com/guide/topics/manifest/intent-filter-element.html
答案 1 :(得分:2)
尽管这是一个有点老问题,但我正在添加我的发现,以便它可以帮助新访问者。
要接收Intent.ACTION_MEDIA_BUTTON,不需要从代码广播注册意图。文档说明意图必须在清单中注册。无法通过代码注册来实现它。
使用registerMediaButtonEventReceiver
在清单android:priority="<int value>"
中设置优先级有效。我使用了2147483647甚至能够覆盖股票播放器。我看到winamp正在使用最高优先级。
希望这有帮助。
答案 2 :(得分:1)
首先,如果清单中已经提到过,那么您不应该在代码中注册接收器。然后,接收者的名称无效,它应该是完整的类名,或者是速记,它将附加到应用程序包名称。如果BCreceiver
位于主包中,则属性值应为".BCreceiver"
。最后提到的是你不应该真正改变优先级,没有拦截Android中的广播(据我所知),所以订阅动作的所有BroadcastReceivers
都会在被解雇时收到广播。尝试这些修补程序并更新您的问题。
答案 3 :(得分:1)
要捕获耳机按钮,应在onCreate in Activity
中注册接收器AudioManager manager = (AudioManager) getSystemService(AUDIO_SERVICE);
manager.registerMediaButtonEventReceiver(new ComponentName(getPackageName(), BCreceiver.class.getName()));