Android 广播 - 使用权限发送和接收

Posted

技术标签:

【中文标题】Android 广播 - 使用权限发送和接收【英文标题】:Android Broadcasts - sending and receiving with permissions 【发布时间】:2017-12-22 12:07:43 【问题描述】:

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

sender类中,我尝试发送普通广播

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

带有androidManifest 文件

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

receiver类中,我写了一个自定义的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"); 时,它永远不会触发任何事情。任何人都可以为我解释为什么?谢谢

【问题讨论】:

【参考方案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 和发件人应用必须先安装,因为它定义了自定义权限。

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

【讨论】:

太棒了!谢谢

以上是关于Android 广播 - 使用权限发送和接收的主要内容,如果未能解决你的问题,请参考以下文章

Android本地广播的使用

Android广播阻塞、延迟问题

Android 使用udp发送广播

四大组件之BroadcastReceiver-使用权限和常用的系统广播

说说Android的广播(1)

急!!Android系统中,广播Intent的问题