如何在android中设置广播发送者和接收者的权限

时间:2012-08-02 03:49:18

标签: android broadcastreceiver

我们如何在广播发送应用程序中指定哪个应用程序可以接收此广播,以及在接收特定应用程序有权向其广播接收器发送广播的应用程序...

我是android的新手。我在网上阅读了文档等,但找不到指定这些权限的语法。

5 个答案:

答案 0 :(得分:74)

要控制谁能够接收广播消息,您可以使用方法sendBroadcast

public abstract void sendBroadcast (Intent intent, String receiverPermission)

您可以在其中精确确定所需权限的名称。如果接收方未声明此权限,则无法获取该消息。例如,广播发送者可以执行以下操作:

Intent broadcast = new Intent(this, MyBroadcastReceiver.class);
sendBroadcast(broadcast, "andro.jf.mypermission");

在广播发送者的清单中,应声明新的权限:

<!--  Declaring the special permission -->
<permission android:name="andro.jf.mypermission" 
        android:label="my_permission" 
        android:protectionLevel="dangerous"></permission>

然后,在应该接收此广播的应用程序中,您必须声明此权限并说您使用它。在清单中,您可以添加:

<!--  I use the permission ! -->
<uses-permission android:name="andro.jf.mypermission"/>

当然,您必须声明您的广播接收器:

<receiver android:name="MyBroadcastReceiver" android:exported="true" />

您可以查看this post以获取自定义权限的完整示例,还可以查看有关此问题的android developer page。请注意应用程序的安装顺序,因为该应用程序定义了权限should be installed first

答案 1 :(得分:37)

如果您想限制只能向您的广播接收器发送意图的人,请按以下方式进行:

广播接收器

<manifest ...>

    <!-- Permission declaration -->
    <permission android:name="my.app.PERMISSION" />

    <receiver 
        android:name="my.app.BroadcastReceiver"
        android:permission="my.app.PERMISSION"> <!-- Permission enforcement for delivering intents to this receiver -->
        <intent-filter>
            <action android:name="my.app.Action" />
        </intent-filter>
    </receiver>

    ...
</manifest>

广播发件人

<manifest ...>
    <!-- We declare we own the permission to send broadcast to the above receiver -->
    <uses-permission android:name="my.app.PERMISSION" />

    ...
</manifest>

发件人活动发送广播到收件人

Intent intent = new Intent();
intent.setAction("my.app.Action");
activity.sendBroadcast(intent);

如果您声明这样的权限:

<permission android:protectionLevel="signature" android:name="my.app.PERMISSION" />

然后发件人将能够使用此权限并仅在发件人收件人应用签名时向收件人发送广播由相同的开发人员证书。

答案 2 :(得分:7)

声明权限

首先,您需要在AndroidManifest.xml

中声明您的权限
<permission android:name="YOUR_PERMISSION_STRING" android:protectionLevel="signature"/>
<uses-permission android:name="com.codylab.photogallery.PRIVATE"/>

the android:name值用作权限值,稍后将使用。

用法

有两种与广播接收器相关的许可使用:

(1)控制哪个应用程序可以接收您的广播:

String PERMISSION_STRING_PRIVATE_RECEIVER = "YOU_NEED_THIS_TO_RECEIVE_THIS_BROADCAST"
sendBroadcast(intent, PERMISSION_STRING_PRIVATE_RECEIVER);

通过此用法,您可以控制只有授权的应用程序才能处理您发送的广播。

(2)仅处理具有指定权限的广播

String PERMISSION_STRING_PRIVATE_BROADCASTER = "ONLY HANDLE BROADCASTS WITH THIS PERMISSION"
IntentFilter filter = new IntentFilter(ACTION_SAMPLE);
registerReceiver(mReceiver, filter, PERMISSION_STRING_PRIVATE_BROADCASTER, null);

通过此用法,您可以确保广播公司获得授权。

答案 3 :(得分:2)

在清单

中的receiver标签中使用intent过滤器
 <receiver
    android:name="Your receiver"
    android:enabled="true"
    android:exported="false" >
    <intent-filter>
        <action android:name="action"/>
        <category android:name="category" />
    </intent-filter>
</receiver>

向应用发送广播

   Intent intent = new Intent();
   intent.setAction("use same action in receiver");
   intent.addcategory("use same category in receiver");
   context.sendBroadcast(intent); 

答案 4 :(得分:2)

经过半天的搜索和测试,基于@JFL的回答,我发现发件人应用必须添加<permission>标签和<uses-permission>标签,然后接收者可以在获得许可的情况下接收广播。否则,接收方应用程序将不会收到广播。