Android - 应用安装、卸载、覆盖安装的广播及不生效原因解析
转载请注明出处: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 - 应用安装、卸载、覆盖安装的广播及不生效原因解析相关推荐
- android 应用程序安装卸载(安装应用宝后自动弹出卸载应用宝)
获取程序安装卸载广播 电脑上有腾讯管家,作为安卓开发,用真机测试的比较多,鄙人算一个,不喜欢用应用宝,当你卸载了应用宝之后,插上USB,有时候就回静默安装应用宝,然后弹出应用宝获取什么什么权限,特别烦 ...
- Android使用adb安装和覆盖安装apk
过程 配置环境变量,将上图所示完整地址加到环境变量path中 在命令输入adb install apk_path 例如:adb install xxx.apk 覆盖安装命令示例 adb install ...
- Android 打包apk不能覆盖安装
首先通过日志排查错误 发现是签名不一致问题 我是debug模式下安装release包不能覆盖 release包下可以覆盖安装 这时候配置一下就可以debug模式下的签名就可以了 https://www ...
- android 覆盖安装数据库版本冲突,Android覆盖安装及常遇到的问题
Android 覆盖安装 a. 覆盖安装apk文件后,shared_prefs中的数据不会丢失,数据库表中的数据也不会丢失. b. 升级数据库的方法 public void onUpgrade(SQL ...
- Android监控应用安装、删除和覆盖安装
概述 系统在安装.删除.覆盖安装应用的时候会发出相应的广播,因此只需要监听相应广播即可. 广播Aciton如下: //新增包public static final String ACTION_PACK ...
- Android开发入门与实战之Android应用安装卸载
当一个Android开发者完整的开发完毕一个程序应用软件结束后要进行软件测试,这就是软件测试员的来历,那么在这之前,要进行Android开发应用的安装与卸载. Android开发入门与实战之Andro ...
- android apk无法覆盖安装解决
android apk包无法覆盖安装的原因有很多,比如包名问题.签名不一致问题.版本号问题等.在你不确定是什么原因的时候,你可能会一 一去尝试. 那么现在我就告诉你一种终极解决方案: 其实androi ...
- APP的安装卸载测试
学习的时候,看到某位大神写的,觉得总结的很好的,有心学习的可以看一下的哦 APP的安装卸载测试 安装 1)软件在不同操作系统(Palm OS.Symbian.Linux.Android.iOS.Bla ...
- InstallShield : 实现二次安装时的覆盖安装
实验的原因 偶遇csdnerA君, 需要解决领导给他的打包需求. 需求要求: * 二次安装时,需要检查是否有旧版安装. * 如果有旧版安装,提示用户是否继续安装. * 如果不继续安装,退出安装程序. ...
最新文章
- 红帽:虚拟化关键业务应用需突破五大障碍
- zabbix 监控 tomcat/jvm性能
- win7(64位)php5.5-Apache2.4-mysql5.6环境安装
- Python扩展库scipy.misc中图像转换成pillow图像
- 前后端分离登录验证功能实现案例
- 词嵌入生成词向量_使用词嵌入创建诗生成器
- 腾讯电脑管家怎么阻止软件自动安装
- 《Mastering OpenCV》--3.Markless AR.无标识式AR (1)
- 1年工作经验的C++程序员,感悟分享
- Cesium离线地图极简教程
- 写给大忙人看的进程和线程(内附思维导图)
- http://www.cocoachina.com/ios/20150907/13336.html
- RuntimeError: Unsupported: ONNX export of Slice with dynamic inputs. DynamicSlice is a deprecated ex
- 易經大意(11) 三和 韓長庚 著
- 中秋节活动中奖名单公布啦!!
- android微信登录获取微信账号,微信小程序--登录授权,一键获取用户微信手机号并登录...
- Python Selenium爬虫实现歌曲免费下载
- php小偷cookie,ptcms小说小偷程序 最新EXP漏洞
- 防止系统内存溢出触发OOM的一个内核参数
- 异构计算给我们带来了哪些思考?
热门文章
- java毕业设计博物馆交流平台Mybatis+系统+数据库+调试部署
- experience
- python直方图拟合曲线_关于matplotlib:Python高斯拟合颜色与直方图条形相同
- 需要看的技术类的书籍
- 奔驰女车主哭诉维权,终等来结果··········
- java 解决相互依赖_Maven项目常见问题实战(一) 解决相互依赖
- C语言利用time函数实现简单的定时器
- 润乾报表,显示图片并导出的两种方法
- html小卡片跟着鼠标移动,一个简单的工具:制作互动小卡片
- Android使用jxl快速导出Excel表格