36

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

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

4

5 回答 5

87

要控制谁能够接收广播消息,可以使用方法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" />

您可以查看这篇文章以获取自定义权限的完整示例以及关于此的android 开发者页面请注意应用程序的安装顺序,因为应首先安装定义权限的应用程序。

于 2013-03-09T22:10:59.350 回答
46

如果您想限制谁只能向您的广播接收器发送意图,请这样做:

广播接收器

<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>

从发送方Activity 向接收方发送广播:

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

如果您像这样声明权限:

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

然后,只有当发送者接收者应用程序都由同一个开发者证书签名时,发送者才能使用此权限并向接收者发送广播。

于 2014-02-02T16:59:52.430 回答
13

声明许可

首先,您需要在您的AndroidManifest.xml

<permission android:name="YOUR_PERMISSION_STRING" android:protectionLevel="signature"/>
<uses-permission android:name="com.codylab.photogallery.PRIVATE"/>

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

用法

与广播接收器相关的权限使用有两种:

(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);

通过这种用法,您可以确保广播者已获得授权。

于 2016-03-06T09:27:05.007 回答
3

在清单的接收者标签中使用意图过滤器

 <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); 
于 2012-08-02T03:54:11.543 回答
2

经过半天的搜索和测试,根据@JFL的回答,我发现发送者应用程序必须同时添加<permission>标签和<uses-permission>标签,然后接收者才能接收到有权限的广播。否则,接收方应用程序将不会接收到广播。

于 2016-10-28T03:16:21.537 回答