android targetSdkVersion>=26收不到广播的处理
背景:GP新政策,要求Google Player上架应用的targetSdkVersion>=26。
一、 为啥GP要求targetSdkVersion>=26?
1 targetSdkVersion是啥?有什么作用?
targetSdkVersion是App在打包时可以指定的一个参数。跟一台设备执行哪个版本的代码有关。
举例:
我们都知道android 6.0(api level 23)上有了权限验证机制,比如获取地理位置信息。现在有一台6.0的设备,我们却可以在上面不需要用户授权就获取此权限。具体操作:打包时将targetSdkVersion设置<23即可,因为源码里面会判断ApplicationInfo里的targetSdkVersion,如果小于23的话,是不需要授权的。
2 GP为什么出这个新政策?
- 为了解决新设备上还是跑旧API的漏洞。
- 其它原因,比如给设备省电等。
android里面广播分为粘性广播(sticky)和非粘性广播,非粘性广播时即时的,粘性广播有缓存时间。
举例:
一个部门在开会,主管公布了一个消息,今晚聚餐。这时有人迟到了,主管表示公布完五分钟内到达的人,会跟他们再讲这个消息。这就是粘性广播。
后面迟到的人不会知道这个消息。这就是非粘性广播。
targetSdkVersion>26的话,在manifest里面注册的粘性广播,将不能收到。
二、解决方案
官方解决方案
广播动态注册。
示例:
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction("android.intent.action.PACKAGE_REMOVED");
intentFilter.addDataScheme("package");
context.registerReceiver(new PackageBroadcastReceiver(), intentFilter);
其他解决方案
有一种场景是,SDK开发,用户没有初始化你,但你必须要自己跑起来。
此时有两种解决办法:
- manifest注册非粘性广播
示例:
<receiver android:name="com.test.PackageBroadcastReceiver">
<intent-filter>
<action android:name="android.intent.action.PACKAGE_FULLY_REMOVED" />
<data android:scheme="package" />
</intent-filter>
</receiver>
- manifest注册ContentProvider
示例:
<provider
android:name="com.test.TestContentProvider"
android:authorities="${applicationId}" />
然后在ContentProvider的onCreate()方法里做你要的操作就可以了。
android targetSdkVersion>=26收不到广播的处理的更多相关文章
- Android高版本收不到静态注册的广播
Beginning with Android 8.0 (API level 26), the system imposes additional restrictions on manifest-de ...
- android 学习随笔十六(广播 )
1.广播接收者 BroadcastReceiver 接收系统发出的广播 现实中的广播:电台为了传达一些消息,而发送的广播,通过广播携带要传达的消息,群众只要买一个收音机,就可以收到广播了 Andro ...
- android 学习随笔十八(广播与服务 )
1.广播接收者注册 清单文件注册(Android四大组件都要在清单文件中注册) 一旦应用部署,广播接收者就生效了,直到用户手动停止应用或者应用被删除 广播接收者可以使用代码注册 需要广播接收者运行时, ...
- Android BroadcastReceiver实例Demo(有序广播的发送)
上一篇简介了广播的发送,这篇主要介绍下,有序广播的发送. 设置完相关属性的时候,广播就会依照有序的方式进行发送: 发送顺序: 先发送第二条广播: 再发送第一条广播: 最后发送第三条广播. 代码例如以下 ...
- Android系统编程入门系列之广播接收者BroadcastReceiver实现进程间通信
在前边几篇关于Android系统两个重要组件的介绍中,界面Activity负责应用程序与用户的交互,服务Service负责应用程序内部线程间的交互或两个应用程序进程之间的数据交互.看上去这两大组件就能 ...
- alexkn android第一行代码-7.广播
0.Android 中的广播主要可以分为两种类型,标准广播和有序广播.标准广播(Normal broadcasts)是一种完全异步执行的广播,在广播发出之后,所有的 广播接收器几乎都会在同一时刻接收到 ...
- Android基础总结(4)——广播接收器
在Android中的每个应用程序可以对自己感兴趣的广播进行注册,这样该程序就只会接收自己所关心的广播内容,这些广播可能来自于系统的,也可能来自于其他应用程序的.Android提供了一整套完整的API, ...
- Android学习笔记--Broadcast, BroadcastReceiver(广播)
参考资料:http://www.cnblogs.com/playing/archive/2011/03/23/1992030.html 在 Android 中使用 Activity, Service, ...
- android:targetSdkVersion引起的问题
项目在三星S3和三星Note II 上调用系统相机点击存储的时候崩溃了.查了半天没弄明白原因,后来发现就是因为在manifest里设置了android:targetSdkVersion = 14,导致 ...
随机推荐
- maskView遮罩中多张图片的动画
maskView遮罩中多张图片的动画 说明 用多张图片做遮罩效率极高,非常好理解,而且极其美观! 效果图 素材 源码 // // ViewController.m // FeedBack // // ...
- Oracle数据库突然宕机,处理方案
一.现象 数据库突然断掉,无法响应,. 二.分析 查看日志发现错误如下(日志路径:D:\app\Administrator\diag\rdbms\orcl\orcl\trace\alert_hrpde ...
- Coursera-AndrewNg(吴恩达)机器学习笔记——第二周编程作业(线性回归)
一.准备工作 从网站上将编程作业要求下载解压后,在Octave中使用cd命令将搜索目录移动到编程作业所在目录,然后使用ls命令检查是否移动正确.如: 提交作业:提交时候需要使用自己的登录邮箱和提交令牌 ...
- web应用配置文件详解(web.xml)
转载链接地址:http://blog.csdn.net/guihaijinfen/article/details/8363839 <?xml version="1.0" en ...
- Keepalived + haproxy双机高可用方案
上一篇文章已经讲到了keepalived实现双机热备,且遗留了一个问题 master的网络不通的时候,可以立即切换到slave,但是如果只是master上的应用出现问题的时候,是不会 主动切换的. 上 ...
- 使用MS的ScriptDom来拆解TSQL脚本
此处提供9.1.40413.0版本的DLL一共4个:Microsoft.Data.Schema.dll.Microsoft.Data.Schema.ScriptDom.dll.Microsoft.Da ...
- Java虚拟机17:互斥同步、锁优化及synchronized和volatile
互斥同步 互斥同步(Mutual Exclusion & Synchronization)是常见的一种并发正确性保证手段.同步是指子啊多个线程并发访问共享数据时,保证共享数据在同一时刻只能被一 ...
- shell批量远程连接mysql的方法
一.配置mysql服务器ip列表如下,可自定义: S1 1.1.1.1 3306 user passwd11 dbname_s1S2 2.2.2.2 3306 u ...
- Python 3 与 Javascript escape 传输确保数据正确方法和中文乱码解决方案
注意:现在已不推荐 escape 函数,推荐使用 encodeURIComponent 函数,其中方法更简单,只需进行URL解码即可. 当然了,如下文章解决方案一样可行. 前几天用Python的Bo ...
- 2339: [HNOI2011]卡农
Description 首先去除顺序不同算一种的麻烦,就是最后答案除以总片段数\(2^m-1\) 设\(f_i\)表示安排\(i\)个片段的合法种类 那么对于任何一个包含\(i-1\)个片段的序列(除 ...