美文网首页
BroadcastReceiver-广播(三)发送及自定义广播权

BroadcastReceiver-广播(三)发送及自定义广播权

作者: xixi哈哈笑笑 | 来源:发表于2019-01-18 15:29 被阅读13次

一、广播的发送

经常说”发送广播“和”接收“,表面上看广播作为Android广播机制中的实体,实际上这一实体本身是并不是以所谓的”广播“对象存在的,而是以”意图“(Intent)去表示。定义广播的定义过程,实际就是相应广播”意图“的定义过程,然后通过广播发送者将此”意图“发送出去。被相应的BroadcastReceiver接收后将会回调onReceive()函数。

下段代码片段显示的是一个普通广播的定义过程,并发送出去。其中setAction()对应于BroadcastReceiver中的intentFilter中的action

Intent intent = new Intent();
intent.setAction(BROADCAST_ACTION);
sendBroadcast(intent);

根据不同类型的广播调用相对应的send方法。

  • 普通广播(NormalBroadcast):sendBroadcast(Intent)(Intent, String)
  • 有序广播(OrderedBroadcast):sendOrderedBroadcast(Intent, String)
  • 系统广播(SystemBroadcast):发生各种事件时,系统自动发送
  • 本地广播(LocalBroadcast):LocalBroadcastManager.sendBroadcast(intent)
  • 粘性广播(StickyBroadcast):已弃用(API 21)

具体类型可查看《BroadcastReceiver-广播(四)五种类型》

二、自定义广播权限

2.1、自定义一个广播权限

  • AndroidManifest.xml中,声明一个权限,名为com.example.receiver.receivebroadcast:
<permission
       android:name="com.example.receiver.receivebroadcast"
       android:label="BroadcastReceiverPermission"
       android:protectionLevel="signature">
</permission>

<!--声明要使用的权限-->
<users-permission android:name="com.example.receiver.receivebroadcast"/>
  • 在自定义权限时,通常会指定android:protectionLevel属性,常用的如下:
  • normal:默认的,应用安装前,用户可以看到相应的权限,但无需用户主动授权。
  • dangerousnormal安全级别控制以外的任何危险操作。需要dangerous级别权限时,Android会明确要求用户进行授权。常见的如:网络使用权限,相机使用权限及联系人信息使用权限等。
  • signature:它要求权限声明应用和权限使用应用使用相同的keystore进行签名。如果使用同一keystore,则该权限由系统授予,否则系统会拒绝。并且权限授予时,不会通知用户。它常用于应用内部。protectionLevel声明为signature。如果别的应用使用的不是同一个签名文件,就没办法使用该权限,从而保护了自己的接收者。

2.2、设置广播接收者

  • 采用静态方式:
    在接收方的AndroidManifest.xml中,声明一个权限,名为com.example.receiver.receivebroadcast:
<receiver
       android:name=".MBroadcastReceiver"
       android:exported="false"
       android:permission="com.example.receiver.receivebroadcast">
       <intent-filter>
            <action android:name="BROADCAST_ACTION"/>
       </intent-filter>
</receiver>
  • 采用动态方式:
// 注册广播代码
MBroadcastReceiver receiver = new MBroadcastReceiver ();
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(BROADCAST_ACTION);
//注册receiver时,直接指定发送者应该具有的权限。不然外部应用依旧可以触及到receiver
registerReceiver(receiver, intentFilter, "com.example.receiver.receivebroadcast", null);

// 发送广播代码
Intent intent = new Intent();
intent.setAction(BROADCAST_ACTION);
sendBroadcast(intent, "com.example.receiver.receivebroadcast");

在注册的时候,最关键的一点是用registerReceiver()进行注册,而不是平常用的是registerReceiver()。相较于后者,前者在注册的时候要求了发送者必须具有的权限。如果发送者没有该权限,那么发送者发送的广播即使经过IntentFilter的过滤,也不会被receiver接收。此时如果再自定义一个权限,并且将权限的protectionLevel设置为signature,那么外部应用便无法使用该权限,也就无法触及到该receiver


BroadcastReceiver-广播系列
《BroadcastReceiver-广播(一)实现原理及注册》
《BroadcastReceiver-广播(二)静态注册属性说明》
《BroadcastReceiver-广播(三)发送及自定义广播权限》
《BroadcastReceiver-广播(四)五种类型》

相关文章

  • BroadcastReceiver-广播(三)发送及自定义广播权

    一、广播的发送 经常说”发送广播“和”接收“,表面上看广播作为Android广播机制中的实体,实际上这一实体本身是...

  • 安卓基础学习 Day11 |常用组件-广播和服务

    目录一、广播(一)广播接收者(二)自定义广播的发送与接收(三)有序广播和无序广播二、服务(一)基础知识(二)测试三...

  • Android学习(三)—— 四大组件之Boradcast Re

    本文目录结构:一、广播机制简介二、接收系统广播三、发送自定义广播四、使用本地广播 一、广播机制简介 定义: 类似于...

  • Android中广播的基本使用及说明

    1、Android广播发送及广播类型 广播发送的基本代码: Intent intent = new Intent(...

  • BroadcastReceiver小记

    一、 广播发送及广播类型 Normal Broadcast:普通广播(同步广播) System Broadcast...

  • Android - base - Broadcast

    四大组件之广播 大纲 广播机制简介 广播接收器 广播发信器 接收系统广播 发送自定义广播 本地广播 #广播机制简介...

  • 05广播-发送自定义广播及本地广播

    广播主要分两种类型:标准广播和有序广播 发送标准广播 首先定义一个广播接收器来接收此广播,新建一个MyBroadc...

  • 发送自定义广播

    发送自定义广播 通过 Intent 发送 必须设置action 接收自定义广播 只需要接收的action:name...

  • 发送自定义广播

    发送自定义广播 广播分类:标准广播、有序广播标准广播:所有程序都可以同时接收到(完全异步执行) 有序广播:优先级高...

  • BroadcastReceiver

    前言 本篇主要介绍 广播的类型、注册和发送广播、自定义广播、本地广播等 正文 一、广播的类型 标准广播,是一种完全...

网友评论

      本文标题:BroadcastReceiver-广播(三)发送及自定义广播权

      本文链接:https://www.haomeiwen.com/subject/cqpndqtx.html