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,导致 ...
随机推荐
- SIM900A模块HTTP相关调试笔记
SIM900A模块使用笔记 更新2018-12-8 正常工作状态: 接线方法: 首先将 AT 写入字符串输入框,然后点击 发送.因为模块波特率默认是 9600,所以两条指令的显示都是没有问题的:如果将 ...
- python 统计学的各种检验
1.使用python中的Numpy进行t检验 http://www.atyun.com/7476.html 2.scipy中的卡方检验 http://wiki.mbalib.com/wiki/%E5% ...
- Visual Studio 2013 Web开发新特性
微软正式发布Visual Studio 2013 RTM版,微软还发布了Visual Studio 2013的最终版本..NET 4.5.1以及Team Foundation Server 2013. ...
- App案例分析——XBMC
本文分析app的是安卓本地视频播放器:XBMC. 第一部分: 调研,评测 1.下载软件并使用起来,描述最简单直观的个人第一次上手体验. 第一次使用这个播放器,就很喜欢这个主界面,其他类似软件的主界 ...
- 死磕salt系列-salt文章目录汇总
死磕salt系列-salt入门 死磕salt系列-salt配置文件 死磕salt系列-salt grains pillar 配置 死磕salt系列-salt 常用modules 死磕salt系列-sa ...
- 自定义ClassLoader
自定义classloader MapleClassLoader package com.maple; import java.io.*; public class MapleClassLoader e ...
- Day10 MVC
经典三层 表述层(表示层): 前台交互,调用后台 web 业务逻辑层: 处理业务 service 数据持久层: 与数据库之间进行交互 dao 面向对象原则 面 ...
- openstack镜像制作思路、指导及问题总结
一.思路就4步:1.创建镜像文件2.用nova-compute自带的kvm,启动.iso文件,用vncviewer完成OS的安装过程3.OS安装完毕,停止虚拟机,kvm重启镜像,安装必要的软件4.后续 ...
- centos 系统安装基本步骤,面试必考
1.调整开机媒体,通常为cd或者dvd,也可以是u盘. 2.选择安装模式,是否需要图形化 3.语系及键盘语系选择 4.软件选择 5.磁盘分区操作,主+扩展分区最多4个.逻辑分区在扩展分区下建立 6.时 ...
- ORP计
ORP计 ORP计通过测量铂或金电极与参比电极之间的电位差,转换成氧化还原电位信号.氧化还原电位测量用电极可与转换放大器组合,转换放大器部分与pH测量用相同.ORP计可用于排水处理(氰基处理.铬酸处理 ...