admin管理员组

文章数量:1558079

(一)原理解析

在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安卓手