整理之BroadcaseReceiver
广播的分类
- 有序广播:按接收器优先级从高到低接受消息,一次只能有一个接收器处理消息。中途可以被截断。
- 无序广播:所有接收器同时接受消息并处理,无法拦截。
- 本地广播:只能在本应用内传播的无需广播。上面两种广播可以被其他应用接收到。
静态指定动态注册接收器的广播范围:
<permission
android:name="com.example.permission.MyReceiver"
android:protectionLevel="signature" />
属性值 限定方式
normal 默认值。较低风险的权限,对其他应用,系统和用户来说风险最小。系统在安装应用时会自动批准授予应用该类型的权限,不要求用户明确批准(虽然用户在安装之前总是可以选择查看这些权限)
dangerous 较高风险的权限,请求该类型权限的应用程序会访问用户私有数据或对设备进行控制,从而可能对用户造成负面影响。因为这种类型的许可引入了潜在风险,所以系统可能不会自动将其授予请求的应用。例如,系统可以向用户显示由应用请求的任何危险许可,并且在继续之前需要确认,或者可以采取一些其他方法来避免用户自动允许
signature 只有在请求该权限的应用与声明权限的应用使用相同的证书签名时,系统才会授予权限。如果证书匹配,系统会自动授予权限而不通知用户或要求用户的明确批准
signatureOrSystem 系统仅授予Android系统映像中与声明权限的应用使用相同的证书签名的应用。请避免使用此选项,“signature”级别足以满足大多数需求,“signatureOrSystem”权限用于某些特殊情况
| 属性值 | 限定方式 |
|---|---|
| normal | 对其他应用,系统和用户来说风险最小。 |
| dangerous | 请求该类型权限的应用程序会访问用户私有数据或对设备进行控制,从而可能对用户造成负面影响。因为这种类型的许可引入了潜在风险,所以系统可能不会自动将其授予请求的应用。 |
| signature | 只有在请求该权限的应用与声明权限的应用使用相同的证书签名时,系统才会授予权限。如果证书匹配,系统会自动授予权限而不通知用户或要求用户的明确批准 |
| signatureOrSystem | 系统仅授予Android系统映像中与声明权限的应用使用相同的证书签名的应用。请避免使用此选项,“signature”级别足以满足大多数需求,“signatureOrSystem”权限用于某些特殊情况 |
发送广播
//普通广播
val intent = Intent(this, MyReceiver::class.java).apply {
action = "XXX"
intent.setPackage(packageName)
}
sendBroadcast(intent)
//有序广播
sendOrderedBroadcast(intent, null)
//本地广播
val mLocalBroadcastManager = LocalBroadcastManager.getInstance(this)
val filter = IntentFilter("XXX")
mLocalBroadcastManager.registerReceiver(mMyReceiver, filter)
mLocalBroadcastManager.sendBroadcast(intent)
mLocalBroadcastManager.sendBroadcastSync(Intent)
mLocalBroadcastManager.unregisterReceiver(localReceiver) //该变量需要取消注册
接收广播
创建接收器
class MyReceiver : BroadcastReceiver() {
override fun onReceive(context: Context?, intent: Intent?) { }
}
注册接收器
//方式一:静态注册
<receiver android:name="com.yirong.library.NetStateReceiver">
<intent-filter android:priority="99">
<action android:name="android.net.conn.CONNECTIVITY_CHANGE"></action>
</intent-filter>
</receiver>
//方式二:动态注册
val intentFilter = IntentFilter("ACTION").apply {
priority = 90
}
val receiver = new MyReceiver();
registerReceiver(receiver, intentFilter);
unregisterReceiver(receiver);
动态接收器:优点灵活,不耗电,易控,省内存 但需要手动注销 适用场景:需要特定时候监听的广播
静态接收器:优点即使应用程序被关闭,也能接收广播。 但耗电,占内存。 适用场景:需要时刻监听的广播
但是 从7.0开始已经对静态注册做出了一些限制(权限),并在8.0使大部分静态注册失效了。
也就是说,从Android7.0开始,尽量只使用动态方式注册广播接收器
整理之BroadcaseReceiver的更多相关文章
- Java 面试/笔试题神整理 [Java web and android]
Java 面试/笔试题神整理 一.Java web 相关基础知识 1.面向对象的特征有哪些方面 1.抽象: 抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面.抽象并 ...
- dotNET跨平台相关文档整理
一直在从事C#开发的相关技术工作,从C# 1.0一路用到现在的C# 6.0, 通常情况下被局限于Windows平台,Mono项目把我们C#程序带到了Windows之外的平台,在工作之余花了很多时间在M ...
- UWP学习目录整理
UWP学习目录整理 0x00 可以忽略的废话 10月6号靠着半听半猜和文字直播的补充看完了微软的秋季新品发布会,信仰充值成功,对UWP的开发十分感兴趣,打算后面找时间学习一下.谁想到学习的欲望越来越强 ...
- SQL Server 常用内置函数(built-in)持续整理
本文用于收集在运维中经常使用的系统内置函数,持续整理中 一,常用Metadata函数 1,查看数据库的ID和Name db_id(‘DB Name’),db_name('DB ID') 2,查看对象的 ...
- kafka学习笔记:知识点整理
一.为什么需要消息系统 1.解耦: 允许你独立的扩展或修改两边的处理过程,只要确保它们遵守同样的接口约束. 2.冗余: 消息队列把数据进行持久化直到它们已经被完全处理,通过这一方式规避了数据丢失风险. ...
- JAVA程序员常用软件整理下载
********为了大家学习方便,特意整理软件下载如下:*************Java类软件:-------------------------------JDK7.0:http://pan.ba ...
- js数组学习整理
原文地址:js数组学习整理 常用的js数组操作方法及原理 1.声明数组的方式 var colors = new Array();//空的数组 var colors = new Array(3); // ...
- GJM : C#设计模式汇总整理——导航 【原创】
感谢您的阅读.喜欢的.有用的就请大哥大嫂们高抬贵手"推荐一下"吧!你的精神支持是博主强大的写作动力以及转载收藏动力.欢迎转载! 版权声明:本文原创发表于 [请点击连接前往] ,未经 ...
- 整理下.net分布式系统架构的思路
最近看到有部分招聘信息,要求应聘者说一下分布式系统架构的思路.今天早晨正好有些时间,我也把我们实际在.net方面网站架构的演化路线整理一下,只是我自己的一些想法,欢迎大家批评指正. 首先说明的是.ne ...
随机推荐
- odoo里面的read_group写法
#计算数task_count = fields.Integer(compute='_compute_task_count', string="Task Count")def _co ...
- python 环境遇到的报错
pipenv install -r requirements.txt 时遇到错误: `Command "python setup.py egg_info" failed with ...
- django2.1实现全文检索(最详细)+遇到的坑+jieba分词
首先django实现全文检索在这里使用的是haystack,环境是django2.1+win10 64+py3.7 1: 安装包: pip install dgango-haystack #安装全局检 ...
- homeless靶机
仅供个人娱乐 靶机信息 下载地址:https://www.vulnhub.com/entry/homeless-1,215/ 一.主机扫描 二.信息收集 在网页源码和页面上,我们发现User-Agen ...
- anyRTC SDK 5月迭代:优化自定义加密功能,让通信更安全
anyRTC SDK 5月上新,新增多种加密类型,让实时音视频通信更安全:新增移动端推流支持1080P分辨率的支持:此外还对事件上报.日志详情.数据统计.网络传输等多项功能进行了优化改进. 以下为更新 ...
- 承载童年的游戏机,已停产!但我在 GitHub 找到了它们
那些年,上网用的是电话线,小企鹅也只会笨拙地左右摇晃,手机还只是打电话的工具.虽然那些年没有互联网,但游戏机承载了我的童年. 小时候我老是追着我的两个哥哥,他们带我玩了好多种游戏机,比如街机.红白机. ...
- JUC学习笔记(二)
JUC学习笔记(一)https://www.cnblogs.com/lm66/p/15118407.html 1.Lock接口 1.1.Synchronized 1.1.1.Synchronized关 ...
- 全网最硬核Handler面试题深度解析
1.简述Handler的实现原理 Android 应用是通过消息驱动运行的,在 Android 中一切皆消息,包括触摸事件,视图的绘制.显示和刷新等等都是消息.Handler 是消息机制的上层接口,平 ...
- 嵌入式linux启动过程详解
启动第一步--加载BIOS 当你打开计算机电源,计算机会首先加载BIOS信息,BIOS信息是如此的重要,以至于计算机必须在最开始就找到它.这是因为BIOS中包含了CPU的相关信息.设备启动顺序信息.硬 ...
- setsockopt中参数之SO_REUSEADDR的意义
1.setsockopt中参数之SO_REUSEADDR的意义 1.一般来说,一个端口释放后会等待两分钟之后才能再被使用,SO_REUSEADDR是让端口释放后立即就可以被再次使用. SO_REUSE ...