0

我嘗試執行BroadcastReceiver的許可方式。Android廣播 - 有權限發送和接收

發件人類,我試圖發送一個正常的廣播

Intent intent = new Intent(); 
    intent.setAction("com.vn.BroadcastReceiver"); 
    intent.putExtra("Foo", "Bar"); 
    sendBroadcast(intent); 

AndroidManifest文件

<uses-permission android:name="com.nhp"/> 

接收機類,我寫了一個自定義的FirstBroadcastReceiver

public class FirstBroadcastReceiver extends BroadcastReceiver { 
     private static final String TAG = FirstBroadcastReceiver.class.getSimpleName(); 

     @Override 
     public void onReceive(Context context, Intent intent) { 
      Log.d(TAG, "onReceive: " + intent.getStringExtra("Foo")); 
     } 
    } 

及其AndroidManifest

<permission android:name="com.nhp" /> 

    <receiver 
     android:permission="com.nhp" 
     android:exported="true" 
     android:name=".receivers.FirstBroadcastReceiver"> 
     <intent-filter> 
      <action android:name="com.vn.BroadcastReceiver" /> 
     </intent-filter> 
    </receiver> 

我安裝接收機應用第一和發件人然後。它的工作!

但是當我嘗試撥打sendBroadcast(intent,"com.nhp");時,它從不觸發任何事情。任何人都可以爲我解釋爲什麼?謝謝

回答

1

自定義權限應在發送者中聲明,接收者應該請求它。

而且,廣播接收機不需要android:permission屬性。如果發件人必須具有特定權限,您才應該使用它。


發件人

發件人聲明自定義權限在其清單

<permission android:name="com.nhp" /> 

和發送廣播

Intent intent = new Intent(); 
intent.setAction("com.vn.BroadcastReceiver"); 
intent.putExtra("Foo", "Bar"); 
sendBroadcast(intent, "com.nhp"); 

接收機

在其清單中的自定義權限的接收器的請求和監聽廣播

<uses-permission android:name="com.nhp"/> 
... 
... 
... 
<receiver 
    android:exported="true" 
    android:name=".receivers.FirstBroadcastReceiver"> 
    <intent-filter> 
     <action android:name="com.vn.BroadcastReceiver" /> 
    </intent-filter> 
</receiver> 

當然,the order of the installations is important和因爲它定義了定製權限發送器應用必須首先被安裝。

注意:自定義權限是在安裝應用程序時註冊的。定義自定義權限的應用程序必須安裝在使用它的應用程序之前。

+0

太棒了!謝謝 –