监听应用安装&卸载&升级

Posted by 程序亦非猿 on 2015-09-14

前言

因为公司有多个App,所以有下载其他app,并监听其安装卸载的功能需求.

主要是利用系统广播来实现,简单记录一下.

定义IntentFilter

代码定义

注意要加一个为”package”的scheme!

1
2
3
4
5
6
7
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(Intent.ACTION_PACKAGE_ADDED);//监听应用安装
intentFilter.addAction(Intent.ACTION_PACKAGE_REMOVED);//监听应用卸载
intentFilter.addAction(Intent.ACTION_PACKAGE_REPLACED);//监听应用升级
intentFilter.addAction(Intent.ACTION_MY_PACKAGE_REPLACED);//自己的应用升级
intentFilter.addDataScheme("package"); // 必须要
return intentFilter;

Xml配置

1
2
3
4
5
6
7
<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"/>
<action android:name="android.intent.action.MY_PACKAGE_REPLACED"/>
<data android:scheme="package"/>
</intent-filter>

处理结果

获取action判断,intent.getData().getSchemeSpecificPart()获取对应包名,然后进行处理.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
String action = intent.getAction();
if (action.equals(Intent.ACTION_PACKAGE_ADDED)) {
String packageName = intent.getData().getSchemeSpecificPart();
Log.d(TAG, "ACTION_PACKAGE_ADDED:" + packageName);
}
if (action.equals(Intent.ACTION_PACKAGE_REMOVED)) {
String packageName = intent.getData().getSchemeSpecificPart();
Log.d(TAG,"ACTION_PACKAGE_REMOVED:"+packageName);
}
if (action.equals(Intent.ACTION_PACKAGE_REPLACED)) {
String packageName = intent.getData().getSchemeSpecificPart();
Log.d(TAG,"ACTION_PACKAGE_REPLACED:"+packageName);
}

That’s all.
代码保存在Gist
Ps: 应用升级没有测试.