解决接收 ACTION_PACKAGE_REPLACED 的广播会另外接收到 REMOVED 和 ADDED 的问题
问题复现
最近做的项目遇到了一个这样的问题:当软件是覆盖安装时,系统会依次发出以下广播:
那我们如何知道 ADDED 和 REMOVED 的广播是由 REPLACED 发出的动作呢?
解决方案
intent.getBooleanExtra(Intent.EXTRA_REPLACING, false)
通过它即可判断安装和卸载是否来自于覆盖安装的通知,附上代码:
public class AppReceiver extends BroadcastReceiver {private AppReceiverListener mAppReceiverListener;public interface AppReceiverListener {void added(String pageName);void remove(String pageName);void replaced(String pageName);}public void setAppReceiverListener(AppReceiverListener appReceiverListener) {mAppReceiverListener = appReceiverListener;}@Overridepublic void onReceive(Context context, Intent intent) {String action = intent.getAction();if (Intent.ACTION_PACKAGE_ADDED.equals(action) && mAppReceiverListener != null&& !intent.getBooleanExtra(Intent.EXTRA_REPLACING, false)) {String pageName = intent.getData().getSchemeSpecificPart();mAppReceiverListener.added(pageName);Log.e("AppReceiver", ": ACTION_PACKAGE_ADDED 软件已安装");} else if (Intent.ACTION_PACKAGE_REMOVED.equals(action) && mAppReceiverListener != null&& !intent.getBooleanExtra(Intent.EXTRA_REPLACING, false)) {String pageName = intent.getData().getSchemeSpecificPart();mAppReceiverListener.remove(pageName);Log.e("AppReceiver", ": ACTION_PACKAGE_REMOVED 软件已卸载");} else if (Intent.ACTION_PACKAGE_REPLACED.equals(action) && mAppReceiverListener != null) {String pageName = intent.getData().getSchemeSpecificPart();mAppReceiverListener.replaced(pageName);Log.e("AppReceiver", ": ACTION_PACKAGE_REPLACED 软件已覆盖");}}
}
思路来自于:
android中的Package替换流程
解决接收 ACTION_PACKAGE_REPLACED 的广播会另外接收到 REMOVED 和 ADDED 的问题相关推荐
- 【转】QT 串口QSerialPort + 解决接收数据不完整问题
[转]QT 串口QSerialPort + 解决接收数据不完整问题 参考文章: (1)[转]QT 串口QSerialPort + 解决接收数据不完整问题 (2)https://www.cnblogs. ...
- QT串口QSerialPort解决接收数据不完整问题
QT串口QSerialPort解决接收数据不完整问题 QSerialPort类例程:Examples\Qt-5.9.1\serialport\terminal,该例子完美展示了qt串口收发过程,直接在 ...
- android无法接收短信广播,Android BroadcastReceiver接收收到短信的广播
一.知识介绍 1.broadcastReceiver是广播接受者,四大组件之一. 2.Android中内置了很多系统级别的广播,可以在应用程序中得到各种系统的状态信息. 3.使用场景: ①当手机没有电 ...
- 解决注册Github邮箱用qq邮箱无法收到验证码的问题
解决注册Github邮箱用qq邮箱无法收到验证码的问题 注册GitHub邮箱收不到验证码无法完成注册,需要把GitHub设置成邮箱白名单
- Ubuntu18.04解决github提交代码Support for password authentication was removed 问题
Ubuntu18.04解决github提交代码Support for password authentication was removed 问题 原因是:push以用户名+密码的方式不被支持 1.U ...
- android5.0 广播失效,解决Android 8.0及以上系统接收不到广播的问题
最近把自己的手机系统升级到了android 8.0,然后以前能正常运行的项目,莫名其妙的出了问题,有个地方广播接收不到了,然后分别在6.0和7.0的设备上运行了项目,发现一切正常,擦,估计是高版本系统 ...
- Android 接收不到广播的原因解决
1.高版本,用户发送自定义广播,接收不到信息 Intent intent = new Intent(); intent.setAction("demo.destroy"); int ...
- android ibluetootha2dp,无法接收BluetoothA2dp.ACTION_PLAYING_STATE_CHANGED广播
背景 : 开发应用程序,使Android手机A2DP接收器 . BlueDroid堆栈支持A2DP接收器,但默认情况下禁用它 . Modified source code to enable A2DP ...
- C++编程笔记:使用WinHTTP实现HTTP访问(解决接收UTF8数据乱码问题)
实现HTTP访问的流程包括以下几步: 1, 首先我们打开一个Session获得一个HINTERNET session句柄: 2, 然后我们使用这个session句柄与服务器连接得到一个HINTER ...
- Csocket OnReceive接收数据部分(解决接收数据不全的问题+获取时间+将数据写入文本文档)
void CDebugDlg::OnReceive() {BYTE cbDataBuffer[1024];BYTE buff;int len,a,leng;CString b,c,d;CString ...
最新文章
- Oracle Goldengate OGG 11g与各操作系统及数据库版本的兼容列表
- [Java基础] 深入jar包:从jar包中读取资源文件
- web前端入门学习 css(3)(背景相关)
- php实现倒计时效果
- java编码给出二维数组List<List<Integer>>matrix,输出每列最小的值
- python对列表中的数值进行统计运算_python-从单词列表中计算元音并返回数字作......
- 字符串操作以及打印 —— 实现上传下载的进度条功能
- [转]Bing Maps Tile System 学习
- java 线程类 通信_Java 中利用管道实现线程间的通讯
- mysql math.max_Math.max.apply()用法
- Eigen教程(7)之归约、迭代器和广播
- 服务器正常运行温度,服务器cpu的温度在什么范围内是属于正常温度
- openwrt nas_【群晖】用群晖虚拟机安装New Pi(OpenWRT)软路由系统
- markdown语法的使用
- Unity3d制作2D游戏飞翔的小鸟(FlappyBird)
- 谈我们的团队文化建设
- 亚商投资顾问 早餐FM/1011国内成品油价调整迎年内首次搁浅
- 算法创作|龟兔赛跑问题解决方法
- 计算机实验室主要工作业绩范文,实验室工作总结
- echarts 自定义legend 初始化为灰色