博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android 监听apk安装替换卸载广播的实现代码
阅读量:4050 次
发布时间:2019-05-25

本文共 1853 字,大约阅读时间需要 6 分钟。

首先是要获取应用的安装状态,通过广播的形式
以下是和应用程序相关的Broadcast Action
ACTION_PACKAGE_ADDED 一个新应用包已经安装在设备上,数据包括包名(最新安装的包程序不能接收到这个广播)
ACTION_PACKAGE_REPLACED 一个新版本的应用安装到设备,替换之前已经存在的版本
ACTION_PACKAGE_CHANGED 一个已存在的应用程序包已经改变,包括包名
ACTION_PACKAGE_REMOVED 一个已存在的应用程序包已经从设备上移除,包括包名(正在被安装的包程序不能接收到这个广播)
ACTION_PACKAGE_RESTARTED 用户重新开始一个包,包的所有进程将被杀死,所有与其联系的运行时间状态应该被移除,包括包名(重新开始包程序不能接收到这个广播)
ACTION_PACKAGE_DATA_CLEARED 用户已经清楚一个包的数据,包括包名(清除包程序不能接收到这个广播)

代码实现 
在AndroidManifest.xml中定义广播

复制代码 代码如下:

<receiver android:name=".AppInstallReceiver"

            android:
="@string/app_name">

            <intent-filter>

                <action android:name="android.intent.action.PACKAGE_ADDED" /> 

                <action android:name="android.intent.action.PACKAGE_REPLACED" />

                <action android:name="android.intent.action.PACKAGE_REMOVED" />

                <
 android:scheme="package" />

            </intent-filter>

        </receiver>


这里选用的是
ACTION_PACKAGE_ADDED 一个新应用包已经安装在设备上,数据包括包名(最新安装的包程序不能接收到这个广播)
ACTION_PACKAGE_REPLACED 一个新版本的应用安装到设备,替换之前已经存在的版本
ACTION_PACKAGE_REMOVED 一个已存在的应用程序包已经从设备上移除,包括包名(正在被安装的包程序不能接收到这个广播)
再看AppInstallReceiver

复制代码 代码如下:

public class AppInstallReceiver extends BroadcastReceiver {

    @Override

    public void onReceive(Context context, Intent intent) {

        PackageManager manager = context.getPackageManager();

        if (intent.getAction().equals(Intent.ACTION_PACKAGE_ADDED)) {

            String packageName = intent.getData().getSchemeSpecificPart();

            Toast.makeText(context, "安装成功"+packageName, Toast.LENGTH_LONG).show();

        }

        if (intent.getAction().equals(Intent.ACTION_PACKAGE_REMOVED)) {

            String packageName = intent.getData().getSchemeSpecificPart();

            Toast.makeText(context, "卸载成功"+packageName, Toast.LENGTH_LONG).show();

        }

        if (intent.getAction().equals(Intent.ACTION_PACKAGE_REPLACED)) {

            String packageName = intent.getData().getSchemeSpecificPart();

            Toast.makeText(context, "替换成功"+packageName, Toast.LENGTH_LONG).show();

        }


    }

}


代码实现比较简单,根据接收到的Action来判断应用程序是安装 卸载还是被替换成其他版本

转载地址:http://lyici.baihongyu.com/

你可能感兴趣的文章
jenkins流水线脚本 从sonar代码扫描,到maven构建,到docker打包,到k8s发布
查看>>
微服务项目占用内存过多机器扛不住怎么办?服务allinone设计
查看>>
项目快速开发经验
查看>>
LambdaQueryWrapper动态加过滤条件 动态Lambda(首发)
查看>>
javascript 大数值进行按位运算
查看>>
jacob 设置 插入word 的图片大小
查看>>
html2image html转换为图片 生成快照 java
查看>>
GPRS+wifi 云巡更系统开放sdk api 可以和OA CRM 对接巡更系统
查看>>
浏览器页面之间推送消息 A窗口给B窗口推送消息 用于cef多个browser之间通信
查看>>
冒泡排序的2种写法
查看>>
java 使用html写UI 做winform win桌面客户端程序(一)
查看>>
jxbrowser 教程 1 使用jxbrowser 创建简单的浏览器 使用html5+java写cs客户端
查看>>
jxbrowser 监听所有网络请求 jxbrowser 系列教程2
查看>>
jxbrowser 实现java 和 js互相调用(破解版请联系作者)
查看>>
jxbrowser java代码直接调用js代码 (破解版请联系作者)免license
查看>>
jxbrowser 实现自定义右键菜单 jxbrowser破解版请联系作者
查看>>
快速开发框架设计
查看>>
需要统计的数据
查看>>
eclipse js jsp 卡怎么办,解决办法
查看>>
高性能J2EE接口平台设计
查看>>