Broadcasts在Android7.0以及Android8.0中的变更_天才小汪汪的博客-程序员ITS201

技术标签: Android小知识  broadcastreceiver  

从Android6.0开始,谷歌更新的Android越来越注重应用安全。对一些行为进行了限制,相信大家都有关注这些新版的变更。

本文主要记录我在学习Broadcasts在Android7.0以及Android8.0中的变更的一些笔记。

 

Broadcasts在开发中还是很常用的,它类似于发布/订阅者模式,我日常开发中主要用于监听系统的一些状态改变,例如连接、电量、蓝牙状态等或者是一些必要的场景。至于应用内传达数据时很少用广播了。要么使用回调,要么使用EventBus,但是依然取代不了广播的重要位置。因此学习他的变更十分有必要。

 

 

系统广播的更改

1.被取消掉的广播

Android 7.0及更高版本不再发送以下系统广播。此优化会影响所有应用,而不仅仅是针对Android 7.0的应用。

这就意味着,我们没法监听相机拍摄新照片或者增加新图片新视频的广播了。

 

2.被限制的广播

 

针对Android 7.0(API级别24)及更高版本的应用程序如果想监听以下的广播:必须使用registerReceiver(BroadcastReceiver, IntentFilter)进行注册。在清单中声明接收器不起作用。

也就是说,要监听手机的网络连接状态不能使用静态注册的方法进行监听了。如想监听,必须在应用中动态注册。这个广播之前给流氓软件很大的机会,只要你联网就触发广播,后台消耗你的流量。这个变化也许是好的。

 

3.Android8.0的更多限制

从Android 8.0(API 26级)开始,系统对清单声明的接收器施加了额外的限制。如果您的应用程序的目标API为26级或更高版本,则无法使用清单为绝大多数隐式广播(不针对您的应用程序的广播)声明接收者。然而,目前,有几种广播免受这些限制。应用程序可以继续注册以下广播的侦听器,无论应用程序的API级别如何。

ACTION_LOCKED_BOOT_COMPLETEDACTION_BOOT_COMPLETED

豁免,因为这些广播第一次启动时只发送一次,许多应用程序需要接收这个广播来安排作业,报警等。

ACTION_USER_INITIALIZE"android.intent.action.USER_ADDED""android.intent.action.USER_REMOVED"

这些广播受到特权许可保护,所以大多数普通应用无法接收。

"android.intent.action.TIME_SET"ACTION_TIMEZONE_CHANGEDACTION_NEXT_ALARM_CLOCK_CHANGED

当时间,时区或闹钟发生变化时,时钟应用可能需要接收这些广播来更新闹钟。

ACTION_LOCALE_CHANGED

只有当地区变化时才发送,这不常见。当区域设置更改时,应用程序可能需要更新其数据。

ACTION_USB_ACCESSORY_ATTACHEDACTION_USB_ACCESSORY_DETACHEDACTION_USB_DEVICE_ATTACHEDACTION_USB_DEVICE_DETACHED

如果一个应用程序需要知道这些与USB有关的事件,那么目前还没有注册广播的好选择。

ACTION_HEADSET_PLUG

由于此广播仅在用户物理连接或断开插头时发送,因此如果应用响应此广播,则不太可能影响用户体验。

ACTION_CONNECTION_STATE_CHANGEDACTION_CONNECTION_STATE_CHANGEDACTION_ACL_CONNECTEDACTION_ACL_DISCONNECTED

类似于ACTION_HEADSET_PLUG,如果应用程序接收到这些蓝牙事件的广播,用户体验就不会受到影响。

ACTION_CARRIER_CONFIG_CHANGEDTelephonyIntents.ACTION_*_SUBSCRIPTION_CHANGED"TelephonyIntents.SECRET_CODE_ACTION"

OEM电话应用可能需要接收这些广播。

LOGIN_ACCOUNTS_CHANGED_ACTION

某些应用程序需要了解登录帐户的更改,以便他们可以为新帐户和已更改帐户设置计划操作。

ACTION_PACKAGE_DATA_CLEARED

仅当用户从“设置”显式清除其数据时才发送,因此广播接收者不太可能显着影响用户体验。

ACTION_PACKAGE_FULLY_REMOVED

某些应用程序可能需要在删除另一个软件包时更新其存储的数据; 对于这些应用程序,没有注册此广播的好选择。

注意:其他与封装相关的广播(如ACTION_PACKAGE_REPLACED不能免于新的限制这些广播是非常普遍的,因为它们对于免除这些播放具有潜在的性能影响。

ACTION_NEW_OUTGOING_CALL

为响应用户拨打电话而采取行动的应用程序需要接收此广播。

ACTION_DEVICE_OWNER_CHANGED

这种广播不经常发送; 某些应用程序需要接收它,以便他们知道设备的安全状态已更改。

ACTION_EVENT_REMINDER

日历提供商发送事件提醒日历应用程序。由于日历提供程序不知道日历应用程序是什么,因此该广播必须是隐式的。

ACTION_MEDIA_MOUNTEDACTION_MEDIA_CHECKINGACTION_MEDIA_UNMOUNTEDACTION_MEDIA_EJECTACTION_MEDIA_UNMOUNTABLEACTION_MEDIA_REMOVEDACTION_MEDIA_BAD_REMOVAL

这些广播是由于用户与设备的物理交互(安装或删除存储卷)或作为启动初始化的一部分(可用卷被安装)的结果而发送,因此它们不是常见的情况,并且通常在用户的控制之下。

SMS_RECEIVED_ACTIONWAP_PUSH_RECEIVED_ACTION

这些广播由SMS收件人应用程序依赖。

 

4.关于其他的一些事项

 

之前我好像看见过这么一个说法,但是官方文档没提到。就是说不能跨程序启动广播,当我们静态注册广播时,不能设置

android:exported = “true”= “true”

 

否则会报异常。必须设置

 

android:exported = “false”= “false”

这个我自己到没有亲自验证过,官方文档也没有说明这点。可信度不是很高,等我测试了在补充.

 

 

还有关于监听开机广播启动服务异常的问题,请看这篇文章:ACTION_BOOT_COMPLETED, IntentService, and Android 8.0

 

目前看到就这些,如果对你有帮助别忘了赞一下哈~

-------end------------- end--------------------- end--------------------------------------

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_36009027/article/details/78038069

智能推荐

【python应用】flask+gunicorn+nginx+supervisor:在服务器上部署python的web应用_一笑照夜的博客-程序员ITS201

我的生产环境为Centos7,python3.5。使用的模块为flask+gunicorn+nginx+supervisor。主要参考了该网址与该网址。flask我们已经较熟悉,是一个开发web应用的python模块。gunicorn用于调用我们的python代码,符合wgsi的规范。nginx 是一个高性能的web服务器。通常用来在前端做反向代理服务器。什么叫反向代理?举例如...

python中异或运算_python – 基于ID列表有效计算XOR(^)校验和的方法_weixin_39715834的博客-程序员ITS201

当谷歌搜索有关Python列表理解的信息时,我获得了一个google foobar挑战,我在过去的几天里一直在慢慢地工作以获得乐趣.最新挑战: 有效地要求生成ID列表,忽略每个新行的增加数字,直到剩下一个ID.然后你应该XOR(^)ID来产生校验和.我创建了一个输出正确答案的工作程序,但是在分配的时间内传递所有测试用例(通过6/10)效率不高.长度为50,000应该在20秒内产生结果,但需要320...

RecyclerView的介绍_木晓的博客-程序员ITS201_recyclerview是什么

1、RecyclerView的控件和定义2、RecyclerView属性设置3、RecyclerView优化和数据加载4、三种显示方式5、接口回调的使用6、多布局一.RecyclerView的介绍RecyclerView是谷歌V7包下新增的控件,用来替代ListView的使用,在RecyclerView标准化了ViewHolder类似于ListView中convertView用来做视...

游戏c是什么网络语言,游戏cpdd网络用语是什么意思 王者荣耀里很常见_崔振莹的博客-程序员ITS201

原标题:游戏cpdd网络用语是什么意思 王者荣耀里很常见[闽南网]随着互联网的发展,越来越多的流行语横空出世,在网络上得到广泛使用。当一个网络语流行的时候,不管在微博上还是贴吧里,都会看见和流行语有关的句子和表情包。眼下在各种游戏里,总是能看到游戏玩家们说“cpdd”,似乎这几个字母已经成为了大家约定好的某种暗号。那究竟游戏里的cpdd是什么意思呢? 网络语cpdd是什么意思cpdd作为流行语,可...

11-MyBatis 模糊查询like_鸣鼓ming的博客-程序员ITS201_mybatis模糊查询like语句

1.方式一在java程序中,把like的内容组装好, 把这个内容作为参数传入到sql语句xml <select id="getUserByNameLike" resultType="com.limi.entity.User"> select * from t_user where user_name like #{name} </select>dao List<User> getUserByNameLike(String n

2021主流CAD/CAM/CAE/AEC所用几何引擎具体是什么_Time2017的博客-程序员ITS201

Software Vendor Domain 3D-kernel 4MCAD IntelliCAD 4M S.A., Greece CAD, AEC Open CASCADE Technology Adams MSC Software, USA CAE Parasolid ADEM ADEM, Russia-Israel-Germany CAD, CAM, CAPP ACIS ADINA Modeler ADINA

随便推点

upload-labs详细教程_shayebudon的博客-程序员ITS201

第一关 js检查查看源码由源代码可知,允许上传的文件为.jpg|.png|.gif我们上传一个.jpg文件利用burp suite进行抓包将jpg改为php后,放包上传成功。第二关Content-Type查看源码有源码可知,发现只判断Content-Type类型,所以我们只需修改Content-Type进行绕过即可首先上传php文件,抓上传包将箭头所指的内容改为image/jpeg或image/png或image/gif后...

windows下看看mysqld启动时的提示信息_sunbingzibo的博客-程序员ITS201

用windows的命令行启动mysqld的时候,没有提示信息也不知道,成没有成功,没有成功的话,就会提示出错误信息,一直不知道,mysqld启动时到底干了些什么,最近在用一款软件powercmd,用这个命令行就可以看到mysqld的启动信息了,记录一下,这是一个很有意思的事情贴个截图吧

使用LD_PRELOAD拦截共享函数库的函数调用_tyler_download的博客-程序员ITS201

在linux系统上,程序运行时有一个特征。在程序加载前,系统会预先加载一系列库函数。如果程序运行后,它再使用动态链接库时,如果它调用链接库里面的函数名与预先加载的函数库中的某个函数名相同,那么系统会自动调用预先加载函数库中的函数。这种机制给与我们一个劫持程序运行的入口。例如函数从某个动态加载的so链接库里调用名为function_name的函数,那么我们可以先设置一个链接库,在里面也导出一个同名函数function_name,然后使用修改系统的环境变量LD_PRELOAD,让程序在运行前先加载我们的链接库

【哈佛学习力1:学习策略】_枫眠cc的博客-程序员ITS201

【成长型思维】30秒自我反思:我是一个什么样的人? —— 盲目学习。什么是开放型心态?(open - mindedness) —— OPEN乐意接受新的事物,CLOSED紧固在自己的思维模式里面,只会选择自己愿意做的事情我是一个什么样的人?两种不同的回答类型:1、僵固型思维模式(stiff mindset) “我是一个非常聪明的人” “我是一个数学特别差的人” 2、成长型思维模式(growth mindset) “我有潜力在数学上更加...

python如何爬取sci论文中所需的数据_『爬虫四步走』手把手教你使用Python抓取并存储网页数据!..._weixin_39771260的博客-程序员ITS201

第一步:尝试请求首先进入b站首页,点击排行榜并复制链接https://www.bilibili.com/ranking?spm_id_from=333.851.b_7072696d61727950616765546162.3现在启动Jupyter notebook,并运行以下代码importrequestsurl='https://www.bilibili.com/ranking?spm_i...

Bat实现微信多开_RedClowns的博客-程序员ITS201_微信多开代码bat

Bat实现程序(微信)多开将鼠标放到软件快捷方式上右击,打开属性选项卡,找到目标并复制,如图。新建文本文档,并将后缀名改为bat,复制以下代码,并保存:只需将 D:\Software\Tencent\WeChat\WeChat.exe 改为目标路径即可。@echo offstart D:\Software\Tencent\WeChat\WeChat.exestart D:\Software\Tencent\WeChat\WeChat.exepause我的文件:@echo off