转载请注明出处:https://blog.csdn.net/mythmayor/article/details/80653621

一、应用安装、卸载、覆盖安装的广播

最近想优化一下项目,因为应用是有自动更新的功能的,想在覆盖安装的时候做一些自己的逻辑。于是使用了广播来完成这个需求。
讲到广播接收者,大家都知道,Android中四大组件之一。我们需要新建一个类继承BroadcastReceiver,然后记得去清单文件中配置一下广播接收者。
代码也非常简单,首先看一下自定义的广播接收者:

package com.mythmayor.appinstalllistener;import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;/*** Created by mythmayor on 2018/6/11.*/public class MyInstallReceiver extends BroadcastReceiver {@Overridepublic void onReceive(Context context, Intent intent) {//安装广播if (intent.getAction().equals("android.intent.action.PACKAGE_ADDED")) {String packageName = intent.getDataString();Toast.makeText(context, "安装了应用:"+packageName, Toast.LENGTH_SHORT).show();}//卸载广播if (intent.getAction().equals("android.intent.action.PACKAGE_REMOVED")) {String packageName = intent.getDataString();Toast.makeText(context, "卸载了应用:"+packageName, Toast.LENGTH_SHORT).show();}//覆盖安装广播if (intent.getAction().equals("android.intent.action.PACKAGE_REPLACED")) {String packageName = intent.getDataString();Toast.makeText(context, "覆盖安装了应用:"+packageName, Toast.LENGTH_SHORT).show();}}
}

下面是清单文件的配置:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.mythmayor.appinstalllistener"><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /><uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /><uses-permission android:name="android.permission.RESTART_PACKAGES" /><uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /><applicationandroid:allowBackup="true"android:icon="@mipmap/ic_launcher"android:label="@string/app_name"android:supportsRtl="true"android:theme="@style/AppTheme"><activity android:name=".MainActivity"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity><receiver android:name=".MyInstallReceiver"><intent-filter><action android:name="android.intent.action.PACKAGE_ADDED" /><action android:name="android.intent.action.PACKAGE_REMOVED" /><action android:name="android.intent.action.PACKAGE_REPLACED" /><data android:scheme="package" /></intent-filter></receiver></application></manifest>

安装应用和卸载应用的广播就不说了。说一下覆盖安装的流程,实际上是先发送了卸载的广播,然后才发送了覆盖安装的广播。

二、不生效原因解析

开始我写了个小Demo,模拟了一下这个流程,发现是没有问题的。后来移接到项目上,发现接收不到广播了。
后来想到,从线上更新下来的包是没有这个广播的。所以,尤其是使用覆盖安装的广播时,一定要确认当前安装包和要覆盖的安装包内有覆盖安装的广播。结合上面说的覆盖安装的流程我们 很容易想到这一点,因为覆盖安装时首先会把当前的安装包卸载掉,如果要覆盖的安装包没有相应的广播接收者,那么肯定就会接收不到广播了。

另外目前各厂商的系统都不太一样,个别机型可能由于系统的限制而无法收到相关的广播,以具体测试情况为准。

三、Demo下载

https://download.csdn.net/download/mythmayor/12584065

Android - 应用安装、卸载、覆盖安装的广播及不生效原因解析相关推荐

  1. android 应用程序安装卸载(安装应用宝后自动弹出卸载应用宝)

    获取程序安装卸载广播 电脑上有腾讯管家,作为安卓开发,用真机测试的比较多,鄙人算一个,不喜欢用应用宝,当你卸载了应用宝之后,插上USB,有时候就回静默安装应用宝,然后弹出应用宝获取什么什么权限,特别烦 ...

  2. Android使用adb安装和覆盖安装apk

    过程 配置环境变量,将上图所示完整地址加到环境变量path中 在命令输入adb install apk_path 例如:adb install xxx.apk 覆盖安装命令示例 adb install ...

  3. Android 打包apk不能覆盖安装

    首先通过日志排查错误 发现是签名不一致问题 我是debug模式下安装release包不能覆盖 release包下可以覆盖安装 这时候配置一下就可以debug模式下的签名就可以了 https://www ...

  4. android 覆盖安装数据库版本冲突,Android覆盖安装及常遇到的问题

    Android 覆盖安装 a. 覆盖安装apk文件后,shared_prefs中的数据不会丢失,数据库表中的数据也不会丢失. b. 升级数据库的方法 public void onUpgrade(SQL ...

  5. Android监控应用安装、删除和覆盖安装

    概述 系统在安装.删除.覆盖安装应用的时候会发出相应的广播,因此只需要监听相应广播即可. 广播Aciton如下: //新增包public static final String ACTION_PACK ...

  6. Android开发入门与实战之Android应用安装卸载

    当一个Android开发者完整的开发完毕一个程序应用软件结束后要进行软件测试,这就是软件测试员的来历,那么在这之前,要进行Android开发应用的安装与卸载. Android开发入门与实战之Andro ...

  7. android apk无法覆盖安装解决

    android apk包无法覆盖安装的原因有很多,比如包名问题.签名不一致问题.版本号问题等.在你不确定是什么原因的时候,你可能会一 一去尝试. 那么现在我就告诉你一种终极解决方案: 其实androi ...

  8. APP的安装卸载测试

    学习的时候,看到某位大神写的,觉得总结的很好的,有心学习的可以看一下的哦 APP的安装卸载测试 安装 1)软件在不同操作系统(Palm OS.Symbian.Linux.Android.iOS.Bla ...

  9. InstallShield : 实现二次安装时的覆盖安装

    实验的原因 偶遇csdnerA君, 需要解决领导给他的打包需求. 需求要求: * 二次安装时,需要检查是否有旧版安装. * 如果有旧版安装,提示用户是否继续安装. * 如果不继续安装,退出安装程序. ...

最新文章

  1. 红帽:虚拟化关键业务应用需突破五大障碍
  2. zabbix 监控 tomcat/jvm性能
  3. win7(64位)php5.5-Apache2.4-mysql5.6环境安装
  4. Python扩展库scipy.misc中图像转换成pillow图像
  5. 前后端分离登录验证功能实现案例
  6. 词嵌入生成词向量_使用词嵌入创建诗生成器
  7. 腾讯电脑管家怎么阻止软件自动安装
  8. 《Mastering OpenCV》--3.Markless AR.无标识式AR (1)
  9. 1年工作经验的C++程序员,感悟分享
  10. Cesium离线地图极简教程
  11. 写给大忙人看的进程和线程(内附思维导图)
  12. http://www.cocoachina.com/ios/20150907/13336.html
  13. RuntimeError: Unsupported: ONNX export of Slice with dynamic inputs. DynamicSlice is a deprecated ex
  14. 易經大意(11) 三和 韓長庚 著
  15. 中秋节活动中奖名单公布啦!!
  16. android微信登录获取微信账号,微信小程序--登录授权,一键获取用户微信手机号并登录...
  17. Python Selenium爬虫实现歌曲免费下载
  18. php小偷cookie,ptcms小说小偷程序 最新EXP漏洞
  19. 防止系统内存溢出触发OOM的一个内核参数
  20. 异构计算给我们带来了哪些思考?

热门文章

  1. java毕业设计博物馆交流平台Mybatis+系统+数据库+调试部署
  2. experience
  3. python直方图拟合曲线_关于matplotlib:Python高斯拟合颜色与直方图条形相同
  4. 需要看的技术类的书籍
  5. 奔驰女车主哭诉维权,终等来结果··········
  6. java 解决相互依赖_Maven项目常见问题实战(一) 解决相互依赖
  7. C语言利用time函数实现简单的定时器
  8. 润乾报表,显示图片并导出的两种方法
  9. html小卡片跟着鼠标移动,一个简单的工具:制作互动小卡片
  10. Android使用jxl快速导出Excel表格