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

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

我是新来的android ..我在互联网上阅读文档等,但无法find指定这些权限的语法。

Solutions Collecting From Web of "如何在android中的广播发送者和接收者中设置权限"

在清单中的接收器标签中使用意图filter

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

要控制谁能够接收广播消息,可以使用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开发者页面 。 请注意安装应用程序的顺序,因为应该首先安装定义权限的应用程序 。

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

广播接收机

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

那么只有发件人收件人应用程序都由相同的开发人员证书签名时, 发件人才能获得此权限。

声明权限

首先,您需要在您的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); 

有了这个用法,你可以确保广播公司被授权。

经过半天的search和testing,基于@ JFL的回答,我发现发件人应用程序必须同时添加<permission>标签和<uses-permission>标签,然后接收方才能接收到有权限的广播。 否则,接收器应用程序将不会收到广播。