2011-06-29 35 views
2

我有一个应用程序使用ACTION_MEDIA_BUTTON意图与BroadcastReceiver来控制音乐播放器。用户按下外部硬件上的按钮,并控制应用内音乐播放器。用户也可以按住按钮并更改音量。Android - 其他应用程序窃取我的意图接收器?

我最近下载了另一个使用耳机按钮的应用程序,它接管了我的应用程序中的媒体按钮意图!所以,当这个其他应用程序打开,我按下按钮,另一个应用程序将开始运行,但我的应用程序会认为按钮仍然按下,所以它会循环音量。

总之,

  • 我的应用程序是开放的,应该的媒体按钮意图
  • 其他应用程序被打开唯一的听众,也希望成为的媒体按钮意图
  • 按钮唯一的听众得到按下两个应用程序打开,控制去其他应用程序
  • 我的应用程序认为按钮被按下,因为它失去了控制,因为按钮按下了模式(我认为)。然后它启动我不想启动的函数,因为它认为用户按下了按钮。

有没有什么办法可以确保我的应用程序打开时它是这个媒体按钮意图的唯一接收者?我能否至少检查一下另一个应用是否已经接管了,这样我可以防止意外的行为?

谢谢你的帮助,我从来没有应用程序不能很好地玩!

回答

1

您可以改变您的BroadcastReceiver的优先级(使它大到10000):它应该先获得Intent,然后您可以将它传递给另一个应用程序。

+0

...直到另一个自定义应用程序获得安装优先级为相同的广播20000 :) –

+0

那么,这是一场军备竞赛,真实:)。意图练习的黑暗面。 – Femi

0

我有一个类似的问题。我相信,除了上述优先考虑的'军备竞赛'外,唯一真正的解决办法是关闭其他应用程序。如果您将此应用程序发布给其他用户,则可能会向他们发送一条消息,告诉他们关闭其他媒体播放器应用程序和服务。

在你的清单,你可以意图优先级设置为一个整数的最大值是:2147483647。

你不应该设定。但是你的IntentFilter的优先级高于1000,因为它告诉你的API文档。您可以设置优先级的IntentFilter像这样:

myIntentFilter.setPriority(IntentFilter.SYSTEM_HIGH_PRIORITY); 

我想你应该减去一个从SYSTEM_HIGH_PRIORITY常量作为文档说的值必须小于SYSTEM_HIGH_PRIORITY。从约IntentFilter.setPriority(int)的文档

引用:

应用程序必须使用一个值,该值比SYSTEM_LOW_PRIORITY比SYSTEM_HIGH_PRIORITY较大和较小。

相关问题