Android番外篇 监听安卓手机中的应用安装与卸载
Posted 彭老希
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android番外篇 监听安卓手机中的应用安装与卸载相关的知识,希望对你有一定的参考价值。
(一)原理解析
在android系统中,应用程序的安装与卸载均会由系统监听并进行"全局广播"。其中,BroadcastReceiver就是Android系统全局广播监听类。
方式流程:实现监听应用的安装与卸载
- 自定义一个类去继承BroadcastReceiver并实现相应的方法与逻辑处理
- 对自定义广播进行注册
(二)实战演示
(1)自定义BroadcastReceiver
自定义一个AppInstallReceiver 类继承系统的BroadcastReceiver类,实现其onReceiver方法接收相关广播信息。
逻辑讲述:通过其中的信息
我们可以获得相关应用的【包名】
而不是名称,所以在应用安装或更新完成时,我们需要调用自定义的getName方法通过PackageManager去获得对应的应用名称
。
/**
*
* @author : Dumplings
* @version : v1.0.0
* @ClassName : AppInstallReceiver.java
* @Function : 监听桌面应用的安装、更新、卸载操作
* @Description : 作用:
* 1、针对新应用的下载,可以通过包名去获取程序的数据信息
*
* @Idea : 清单文件请添加以下操作
* <receiver android:name=".ui.receiver.MyAppInstallReceiver">
* <intent-filter android:priority="999">
* <action android:name="android.intent.action.PACKAGE_REPLACED"/>
* <action android:name="android.intent.action.PACKAGE_ADDED"/>
* <action android:name="android.intent.action.PACKAGE_REMOVED"/>
* <data android:scheme="package"/>
* </intent-filter>
* </receiver>
*
* {@link }
* @Encourage :And the more we try to understand one another, the more exceptional each of us will be.
* 我们越是努力理解他人,自身也越发变得优秀。
* @date : 2021/5/10
*/
public class AppInstallReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (action.equals(Intent.ACTION_PACKAGE_ADDED)) {
Toast.makeText(context, "安装了 " + getName(context, intent), Toast.LENGTH_SHORT).show();
} else if (action.equals(Intent.ACTION_PACKAGE_REMOVED)) {
Toast.makeText(context, "卸载了 " + intent.getDataString().substring(8), Toast.LENGTH_SHORT).show();
} else if (action.equals(Intent.ACTION_PACKAGE_REPLACED)) {
Toast.makeText(context, getName(context, intent) + " 更新成功", Toast.LENGTH_SHORT).show();
}
}
private String getName(Context context, Intent intent) {
return getName(context, intent.getDataString().substring(8));
}
private String getName(Context context, String packageName) {
PackageManager pm = context.getPackageManager();
String name = packageName;
try {
name = pm.getApplicationLabel(
pm.getApplicationInfo(packageName,
PackageManager.GET_META_DATA)).toString();
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
return name;
}
}
(2)注册广播
静态注册的广播只要我们的应用安装后就常驻在系统中,即使当我们手机重启也不需要再重新打开我们的应用,所以我们选择采用对我们的自定义广播接收者MyAppInstallReceiver 进行静态注册。
在应用的AndroidManifest.xml的application节点里面定义AppInstallReceiver
,并设置我们要接收的三种action
(安装、卸载、更新):
<!--监听软件 软件卸载-->
<receiver android:name=".ui.receiver.MyAppInstallReceiver">
<intent-filter android:priority="999">
<action android:name="android.intent.action.PACKAGE_REPLACED"/>
<action android:name="android.intent.action.PACKAGE_ADDED"/>
<action android:name="android.intent.action.PACKAGE_REMOVED"/>
<data android:scheme="package"/>
</intent-filter>
</receiver>
以上是关于Android番外篇 监听安卓手机中的应用安装与卸载的主要内容,如果未能解决你的问题,请参考以下文章
Android番外篇 华为手机APP闪退重启清空Log日志问题解决
Android番外篇 Eclipse配置android sdk
Android番外篇 Android Studio查看第三方库依赖树