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,导致 ...
随机推荐
- SpringBoot @AutoWired Null
在调用工具类时,若工具类中含有@Autowired注解,这此工具类对象必须同样使用@Autowired注解,否则工具类中的Spring注入的对象都为空值,这里的HadoopTest就是这样 比如MyC ...
- 内置数据结构(tuple)
一.元组(tuple) 元组不能增.删和改,所以元组的元素只能查. tp = tuple() #初始化一个元组 tp = () #同上 tp = (1, 2, 3, 4,) #错误的定义元组方式 t ...
- fun() 的 拆分和 for 遍历 的结合---------> 函数容器
fun() 的 拆分和 for 遍历 的结合---------> 函数容器
- Django 通过APNS推送消息
最近手上一个项目需要通过APNS向app推送消息,由于后端采用drf框架,在github上找了好多模块,最终发现pzanitti大神的推送模块 django-push-notifications 比较 ...
- 如何让邮件营销平台成为EDM神器?
任何一家做邮件营销的企业都希望自己的投入获得超乎想象的回报,出现打开率.点击率和伴随而来的成交量能够节节攀升的现象,这些数据我们当然可以通过监测各种平台的反馈而得到确切的报表.当然,作为邮件营销平台运 ...
- 在web.xml中配置404错误拦截
<error-page> <error-code>404</error-code> <location>/home.do</location> ...
- Laravel中如何将单个routes.php分割成多个子文件
随着业务逻辑越来越复杂,routes.php文件也会变得越来越庞大,为了便于管理,我们可以像管理配置文件那样将其分割成多个子文件,这实现起来很简单: // app/routes.php ... // ...
- Java执行CMD命令
参见:https://blog.csdn.net/lixingshi/article/details/50467840 public static void runtimeCommand() thro ...
- ubuntu16.04中安装下载工具uget+aria2并配置chrome (stable版)
1.安装uGut sudo apt-get install uget 2.安装aria2 sudo apt-get install arias 3.配置uGet默认下载插件为aria2 菜单栏依次打开 ...
- 创建ROS工程結構
图像化显示目录工程结构:tree $ sudo apt install tree 1.创建ROS工作空间 $ mkdir -p catkin_ws/src # Create mutil-level d ...