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

news/2025/1/12 13:20:43/
转载请注明出处: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


http://www.ppmy.cn/news/677737.html

相关文章

Mac 查找应用安装路径

记录一下&#xff0c;如何快速找到mac上安装应用的安装环境。 查找Java安装路径查找应用安装路径 一、查找Java安装路径 最近重新安装Java JDK&#xff0c;发现找不到Java安装路径&#xff0c;后来发现以下命令&#xff1a; // 查找java安装路径 /usr/libexec/java_home -V…

Android 8.1 应用安装过程总结

整体介绍 一个 Android 应用安装到手机上大致分为四种情形&#xff1a; 系统应用&#xff0c;在设备每次启动时完成安装通过 adb install 命令安装应用市场安装&#xff0c;封装安装过程&#xff08;略&#xff09;第三方应用安装或双击安装包&#xff0c;会启动系统应用引导…

【Android 逆向】应用安装目录 ( Android 应用的默认安装目录 | 查找 Android 应用的安装目录 | 查询当前正在运行的应用包名 | 根据包名查询应用安装路径 )

文章目录 一、Android 应用的默认安装目录二、查找 Android 应用的安装目录1、查询当前正在运行的应用包名2、根据包名查询应用安装路径 一、Android 应用的默认安装目录 应用安装在 Android 系统中后 , 普通应用 会安装到 /data/app/ 目录下 ; 如果是系统应用 , 会安装在 /sys…

Android应用安装方式

Android应用安装有四种方式&#xff1a; SD卡里的APK文件安装&#xff0c;点击Apk&#xff0c;按照系统提示一步一步的安装即可。通过market应用完成&#xff0c;没有安装界面&#xff0c;下载完成之后&#xff0c;自动安装。命令行安装&#xff0c;没有安装界面&#xff0c;直…

Android应用程序安装过程浅析

我们知道在android中。安装应用是由PackageManager来管理的&#xff0c;可是我们发现PackageManager是一个抽象类。他的installPackage方法也没有详细的实现。 那在安装过程中是怎么运行的呐&#xff1f; 调用方 查看代码能够知道ApplicationPackageManager是直接继承自Package…

android应用市场点击下载APK安装详解

Android系统启动篇 1&#xff0c;《android系统启动流程简介》 2&#xff0c;《android init进程启动流程》 3&#xff0c;《android zygote进程启动流程》 4&#xff0c;《Android SystemServer进程启动流程》 5&#xff0c;《android launcher启动流程》 6&#xff0c;…

PostgreSQL 操作json/jsonb

文章目录 前言两种数据类型json和jsonbjson和jsonb操作符额外的jsonb操作符JSON/JSONB 创建函数JSON/JSONB 处理函数 前言 PostgreSQL 9.2 中引入了对JSON类型的支持&#xff0c;经过几个大版本的进化&#xff0c;目前对JSON数字类型的支持已经比较完善。在PG中对JSON格式信息…

9-2 小波滤波器、去噪、增强、变换(matlab程序)

1.简述 小波去噪滤波算法是一种基于小波变换的滤波方法&#xff0c;它通过对信号进行小波变换来分解信号的频率分量&#xff0c;并根据信号的特点选择合适的阈值处理方法来去除噪声。该算法的主要思想是将信号分解成多个频率分量&#xff0c;根据信号的特点选择合适的阈值处理…