2014-08-29 64 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