前言
因为公司有多个App,所以有下载其他app,并监听其安装卸载的功能需求.
主要是利用系统广播来实现,简单记录一下.
定义IntentFilter
代码定义
注意要加一个为”package”的scheme!1
2
3
4
5
6
7IntentFilter 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 | <intent-filter> |
处理结果
获取action判断,intent.getData().getSchemeSpecificPart()获取对应包名,然后进行处理.1
2
3
4
5
6
7
8
9
10
11
12
13
14String 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: 应用升级没有测试.