时间:2021-05-21
在Android应用开发中,有时会遇到以下两种情况,
1. 一些敏感的广播并不想让第三方的应用收到 ;
2. 要限制自己的Receiver接收某广播来源,避免被恶意的同样的ACTION的广播所干扰。
在这些场景下就需要用到广播的权限限制。
第一种场景: 谁有权收我的广播?
在这种情况下,可以在自己应用发广播时添加参数声明Receiver所需的权限。
首先,在Androidmanifest.xml中定义新的权限RECV_XXX,例如:
<permission android:name = "com.android.permission.RECV_XXX"/>
然后,在Sender app发送广播时将此权限作为参数传入,如下:
sendBroadcast("com.android.XXX_ACTION", "com.android.permission.RECV_XXX");
这样做之后就使得只有具有RECV_XXX权限的Receiver才能接收此广播要接收该广播,在Receiver应用的AndroidManifest.xml中要添加对应的RECV_XXX权限。
例如:
<uses-permission android:name="com.android.permission.RECV_XXX"></uses-permission>
第二种场景: 谁有权给我发广播?
在这种情况下,需要在Receiver app的<receiver> tag中声明一下Sender app应该具有的权限。
首先同上,在AndroidManifest.xml中定义新的权限SEND_XXX,例如:
<permission android:name="com.android.SEND_XXX"/>
然后,在Receiver app的Androidmanifest.xml中的<receiver>tag里添加权限SEND_XXX的声明,如下:
<receiver android:name=".XXXReceiver" android:permission="com.android.permission.SEND_XXX"> <intent-filter> <action android:name="com.android.XXX_ACTION" /> </intent-filter></receiver>这样一来,该Receiver便只能接收来自具有该SEND_XXX权限的应用发出的广播。
要发送这种广播,需要在Sender app的AndroidManifest.xml中也声明使用该权限即可,如下:
<uses-permission android:name="com.android.permission.SEND_XXX"></uses-permission>
如此,可以用来对广播的来源与去处进行简单的控制。
同样,对Activity 和 ContentProvider的访问权限控制也类似。
补充知识:Android发送权限受限的广播,指定接受方!
本文实践代码是在Android7.1上的系统级源码上验证通过的。
1.首先是发送方:
在frameworks\base\core\res\AndroidManifest.xml中定义权限
<protected-broadcast android:name="intent.action.LOW_MEMORY" /><uses-permission android:name="com.softmanager.permission.send.SOFTMANAGER"/> <permission android:name="com.softmanager.permission.send.SOFTMANAGER" android:protectionLevel="signature|privileged"/>在代码需求的地方发出广播
Intent systemMgrIntent = new Intent();systemMgrIntent.setAction("intent.action.LOW_MEMORY");systemMgrIntent.addFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES);context.sendOrderedBroadcast(systemMgrIntent, "com.softmanager.permission.receiver.SOFTMANAGER");2.然后是接受方:
在项目的
AndroidManifest.xml中声明权限
<uses-permission android:name="com.softmanager.permission.receiver.SOFTMANAGER" /><permission android:name="com.gionee.softmanager.permission.receiver.SOFTMANAGER" android:protectionLevel="normal" /> android:permission="com.softmanager.permission.send.SOFTMANAGER"在Receiver.java中要添加权限
<receiver android:name=".Receiver" android:permission="com.softmanager.permission.send.SOFTMANAGER" android:exported="true"> <intent-filter> <action android:name="intent.action.LOW_MEMORY"/> </intent-filter> </receiver>最后在onReceiver()中就能接受到广播了
以上这篇Android Broadcast 和 BroadcastReceiver的权限限制方式就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
BroadcastReceiver也就是“广播接收者”的意思,它是用来接收来自系统和应用中的广播。在Android中,Broadcast是一种广泛运用的在应用程
Android组件之间的通信有多种实现方式,Broadcast就是其中一种。在activity和fragment之间的通信,broadcast用的更多本文以一个
Android:BroadcastReceiver注册的方式分为两种:静态注册动态注册1.静态注册在AndroidManifest.xml里通过标签声明属性说明
Intent是Android中用来调用其它组件的类,通过Intent,我们可以非常方便的调用Activity,BroadcastReceiver和Service
Android.permission.MODIFY_PHONE_STATE权限限制已经改为系统权限普通应用程序已经无法调用所以网上找到的那些如何使用androi