Android Broadcast 和 BroadcastReceiver的权限限制方式

所属分类: 软件编程 / Android 阅读数: 47
收藏 0 赞 0 分享

在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的权限限制方式就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

更多精彩内容其他人还在看

Android实现信号强度监听的方法

这篇文章主要介绍了Android实现信号强度监听的方法,是Android手机中很常见的一个实用功能,需要的朋友可以参考下
收藏 0 赞 0 分享

Android实现Activity界面切换添加动画特效的方法

这篇文章主要介绍了Android实现Activity界面切换添加动画特效的方法,非常实用的技巧,需要的朋友可以参考下
收藏 0 赞 0 分享

Android中Dialog去黑边的方法

这篇文章主要介绍了Android中Dialog去黑边的方法,需要的朋友可以参考下
收藏 0 赞 0 分享

Qt for Android开发实例教程

这篇文章主要介绍了Qt for Android开发的方法,具有一定的参考借鉴价值,需要的朋友可以参考下
收藏 0 赞 0 分享

Android开发之时间日期操作实例

这篇文章主要介绍了Android开发之时间日期操作,是Android程序开发中常见的一个功能,需要的朋友可以参考下
收藏 0 赞 0 分享

Android开发之时间日期组件用法实例

这篇文章主要介绍了Android开发之时间日期组件用法,主要介绍了TimePicker和DatePicker组件,对于Android程序开发有不错的借鉴价值,需要的朋友可以参考下
收藏 0 赞 0 分享

Android开发之获取网络链接状态

这篇文章主要介绍了Android获取网络链接状态的方法,主要是通过ConnectivityManager类来完成的,需要的朋友可以参考下
收藏 0 赞 0 分享

Android开发之广播机制浅析

这篇文章主要介绍了Android开发之广播机制浅析,主要包括了发布、接收及配置广播的实例,需要的朋友可以参考下
收藏 0 赞 0 分享

Android开发之登录验证实例教程

这篇文章主要介绍了Android开发之登录验证实现方法,包括发送数据、服务器端验证、配置文件等,需要的朋友可以参考下
收藏 0 赞 0 分享

Android开发之注册登录方法示例

这篇文章主要介绍了Android开发的注册登录方法,是针对Android程序设计中版本兼容性的进一步完善,需要的朋友可以参考下
收藏 0 赞 0 分享
查看更多