2014-08-29 37 views
1

我正在尝试在我的服务中设置一个动态广播接收器来接收来自另一个应用程序的广播。转折点是我想要求广播公司具有特定的权限。如何注册具有权限的动态BroadcastReceiver?

在AndroidManifest服务应用程序文件中,我使用正常的保护等级创建了权限。将要播放的应用程序正在使用上述权限。广播发送如下:

Intent intent = new Intent(); 
intent.setAction(Utils.ACTION_SEND_BUS_MESSAGE); 
intent.putExtra(BusMessage.class.getSimpleName(), msg); 
sendBroadcast(intent, Utils.PERMISSION_SEND_MESSAGE); 

而且在服务接收器是注册:

registerReceiver(receiver, receiver.getIntentFilter(), Utils.PERMISSION_SEND_MESSAGE, null); 

不幸的是广播到不到达接收器。从sendBroadcast和registerReceiver中删除许可允许接收广播。

我也测试了广播公司,以确保所需的许可被授予,它是。

回答

0

扭曲是我想要求广播公司具有特定的权限。

但是,您在代码中编写的内容比这更多。

广播发送如下:

在代码中,你使用sendBroadcast(intent, Utils.PERMISSION_SEND_MESSAGE)。引用the documentation for that flavor of sendBroadcast()(重点补充):

字符串命名该接收器必须以收到您的广播持有许可。

您的sendBroadcast()要求接收器持有任何Utils.PERMISSION_SEND_MESSAGE是,并且显然它不。

+0

不使用第三个参数为接收器注册接收器设置权限? registerReceiver(BroadcastReceiver接收器,IntentFilter过滤器,字符串broadcastPermission,Handler调度器) – 2014-08-29 20:59:27

+1

@ jM2.me:这就是您说发件人必须拥有权限的地方。简单地摆脱第二个参数到'sendBroadcast()'来解决你的问题。 – CommonsWare 2014-08-29 21:06:56

+0

我可能会让事情变得更加复杂,但接收方的目标是接受来自持有Utils.PERMISSION_SEND_MESSAGE的应用程序的广播,并且广播公司也向持有Utils.PERMISSION_SEND_MESSAGE的接收方发送广播。您的评论让我意识到自定义权限已被声明,但仅用于广播应用程序。我所要做的就是在接收器应用程序中使用相同的权限。 – 2014-08-29 21:31:31