Android 广播 - 发送和接收权限

Android Broadcasts - sending and receiving with permissions

我尝试实现BroadcastReceiver的权限方法。

senderclass,我尝试发送一个普通的广播

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

AndroidManifest 文件

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

receiverclass中,我写了一个自定义的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>

我先安装 receiver 应用程序,然后安装 sender。它奏效了!!

但是当我尝试调用 sendBroadcast(intent,"com.nhp"); 时,它从未触发任何事情。任何人都可以为我解释为什么?谢谢

自定义权限应在发送方声明,接收方应请求。

此外,广播接收器不需要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 必须先安装发件人应用程序,因为它定义了自定义权限。

Note: Custom permissions are registered when the app is installed. The app that defines the custom permission must be installed before the app that uses it.