问题复现

最近做的项目遇到了一个这样的问题:当软件是覆盖安装时,系统会依次发出以下广播:
那我们如何知道 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 的问题相关推荐

  1. 【转】QT 串口QSerialPort + 解决接收数据不完整问题

    [转]QT 串口QSerialPort + 解决接收数据不完整问题 参考文章: (1)[转]QT 串口QSerialPort + 解决接收数据不完整问题 (2)https://www.cnblogs. ...

  2. QT串口QSerialPort解决接收数据不完整问题

    QT串口QSerialPort解决接收数据不完整问题 QSerialPort类例程:Examples\Qt-5.9.1\serialport\terminal,该例子完美展示了qt串口收发过程,直接在 ...

  3. android无法接收短信广播,Android BroadcastReceiver接收收到短信的广播

    一.知识介绍 1.broadcastReceiver是广播接受者,四大组件之一. 2.Android中内置了很多系统级别的广播,可以在应用程序中得到各种系统的状态信息. 3.使用场景: ①当手机没有电 ...

  4. 解决注册Github邮箱用qq邮箱无法收到验证码的问题

    解决注册Github邮箱用qq邮箱无法收到验证码的问题 注册GitHub邮箱收不到验证码无法完成注册,需要把GitHub设置成邮箱白名单

  5. Ubuntu18.04解决github提交代码Support for password authentication was removed 问题

    Ubuntu18.04解决github提交代码Support for password authentication was removed 问题 原因是:push以用户名+密码的方式不被支持 1.U ...

  6. android5.0 广播失效,解决Android 8.0及以上系统接收不到广播的问题

    最近把自己的手机系统升级到了android 8.0,然后以前能正常运行的项目,莫名其妙的出了问题,有个地方广播接收不到了,然后分别在6.0和7.0的设备上运行了项目,发现一切正常,擦,估计是高版本系统 ...

  7. Android 接收不到广播的原因解决

    1.高版本,用户发送自定义广播,接收不到信息 Intent intent = new Intent(); intent.setAction("demo.destroy"); int ...

  8. android ibluetootha2dp,无法接收BluetoothA2dp.ACTION_PLAYING_STATE_CHANGED广播

    背景 : 开发应用程序,使Android手机A2DP接收器 . BlueDroid堆栈支持A2DP接收器,但默认情况下禁用它 . Modified source code to enable A2DP ...

  9. C++编程笔记:使用WinHTTP实现HTTP访问(解决接收UTF8数据乱码问题)

    实现HTTP访问的流程包括以下几步:  1, 首先我们打开一个Session获得一个HINTERNET session句柄:  2, 然后我们使用这个session句柄与服务器连接得到一个HINTER ...

  10. Csocket OnReceive接收数据部分(解决接收数据不全的问题+获取时间+将数据写入文本文档)

    void CDebugDlg::OnReceive() {BYTE cbDataBuffer[1024];BYTE buff;int len,a,leng;CString b,c,d;CString ...

最新文章

  1. Oracle Goldengate OGG 11g与各操作系统及数据库版本的兼容列表
  2. [Java基础] 深入jar包:从jar包中读取资源文件
  3. web前端入门学习 css(3)(背景相关)
  4. php实现倒计时效果
  5. java编码给出二维数组List<List<Integer>>matrix,输出每列最小的值
  6. python对列表中的数值进行统计运算_python-从单词列表中计算元音并返回数字作......
  7. 字符串操作以及打印 —— 实现上传下载的进度条功能
  8. [转]Bing Maps Tile System 学习
  9. java 线程类 通信_Java 中利用管道实现线程间的通讯
  10. mysql math.max_Math.max.apply()用法
  11. Eigen教程(7)之归约、迭代器和广播
  12. 服务器正常运行温度,服务器cpu的温度在什么范围内是属于正常温度
  13. openwrt nas_【群晖】用群晖虚拟机安装New Pi(OpenWRT)软路由系统
  14. markdown语法的使用
  15. Unity3d制作2D游戏飞翔的小鸟(FlappyBird)
  16. 谈我们的团队文化建设
  17. 亚商投资顾问 早餐FM/1011国内成品油价调整迎年内首次搁浅
  18. 算法创作|龟兔赛跑问题解决方法
  19. 计算机实验室主要工作业绩范文,实验室工作总结
  20. echarts 自定义legend 初始化为灰色

热门文章

  1. 操作系统的主要功能(3)
  2. 静态时序分析笔记-第二章:STA概念(下)
  3. BUAA 1489
  4. 新闻资讯页面html,html页模板
  5. 小野猫(xiaoyemaokeji)用python写了一个hello world。
  6. 主机可以ping通虚拟机,虚拟机ping不通主机
  7. echarts 多个 geo 实现缩放拖拽同步
  8. 2018-10-10工作日报
  9. MySQL数据库的主从同步和读写分离
  10. Airbnb如何冲破租赁平台两大弊端的封锁而获得成功