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

bla*_*yre 26 android broadcastreceiver

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

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

JFL*_*JFL 76

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

public abstract void sendBroadcast (Intent intent, String receiverPermission)
Run Code Online (Sandbox Code Playgroud)

您在哪里精确所需权限的名称.如果接收方未声明此权限,则无法获取该消息.例如,广播发送者可以:

Intent broadcast = new Intent(this, MyBroadcastReceiver.class);
sendBroadcast(broadcast, "andro.jf.mypermission");
Run Code Online (Sandbox Code Playgroud)

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

<!--  Declaring the special permission -->
<permission android:name="andro.jf.mypermission" 
        android:label="my_permission" 
        android:protectionLevel="dangerous"></permission>
Run Code Online (Sandbox Code Playgroud)

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

<!--  I use the permission ! -->
<uses-permission android:name="andro.jf.mypermission"/>
Run Code Online (Sandbox Code Playgroud)

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

<receiver android:name="MyBroadcastReceiver" android:exported="true" />
Run Code Online (Sandbox Code Playgroud)

您可以查看此帖子以获取自定义权限的完整示例以及有关此内容的Android开发人员页面.请注意应用程序的安装顺序,因为应首先安装定义权限的应用程序.

  • 我是否有必要使用明确的意图?在自定义权限的情况下,隐式意图不会起作用吗? (2认同)

pet*_*syn 38

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

广播接收器:

<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>
Run Code Online (Sandbox Code Playgroud)

广播发送者:

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

    ...
</manifest>
Run Code Online (Sandbox Code Playgroud)

发送者活动向接收者发送广播:

Intent intent = new Intent();
intent.setAction("my.app.Action");
activity.sendBroadcast(intent);
Run Code Online (Sandbox Code Playgroud)

如果您声明这样的权限:

<permission android:protectionLevel="signature" android:name="my.app.PERMISSION" />
Run Code Online (Sandbox Code Playgroud)

然后发送者将能够使用此权限和发送广播到接收器只有当两个发送者接收者应用是由同一个开发者证书签名.


Cod*_*ody 7

申报许可

首先,您需要在您的许可中声明您的许可 AndroidManifest.xml

<permission android:name="YOUR_PERMISSION_STRING" android:protectionLevel="signature"/>
<uses-permission android:name="com.codylab.photogallery.PRIVATE"/>
Run Code Online (Sandbox Code Playgroud)

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

用法

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

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

String PERMISSION_STRING_PRIVATE_RECEIVER = "YOU_NEED_THIS_TO_RECEIVE_THIS_BROADCAST"
sendBroadcast(intent, PERMISSION_STRING_PRIVATE_RECEIVER);
Run Code Online (Sandbox Code Playgroud)

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

(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);
Run Code Online (Sandbox Code Playgroud)

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

  • 这是示例中唯一不需要清单文件中声明广播接收器的答案。谢谢! (2认同)

Vis*_*h.M 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>
Run Code Online (Sandbox Code Playgroud)

将广播发送到应用程序

   Intent intent = new Intent();
   intent.setAction("use same action in receiver");
   intent.addcategory("use same category in receiver");
   context.sendBroadcast(intent); 
Run Code Online (Sandbox Code Playgroud)