Android广播 - 发送和接收权限

时间:2017-07-17 20:16:09

标签: java android android-permissions android-broadcast android-broadcastreceiver

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

发件人课程中,我尝试发送普通广播

    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 个答案:

答案 0 :(得分: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和发件人应用,因为它定义了自定义权限。

  

注意:安装应用程序时会注册自定义权限。必须在使用它的应用程序之前安装定义自定义权限的应用程序。