监听App安装卸载的系统广播

Posted Ang_qq_252390816

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了监听App安装卸载的系统广播相关的知识,希望对你有一定的参考价值。

关于监听android中Apk的卸载安装的广播主要分两种来讲,主要分为Android8.0之前的和Android8.0之后的版本,主要是还是因为Android8.0性特性引起的;

第一种:

Android 8.0之前的老系统版本,直接注册静态广播接受者即可实现;

新建广播接受者PackageInstalledReceiver:

public class PackageInstalledReceiver extends BroadcastReceiver {

    private static final String TAG = "PackageInstalledReceiver";
    @Override
    public void onReceive(Context context, Intent intent) {
        Log.e(TAG, "APK动态广播!");
        if (intent.getAction().equals(Intent.ACTION_PACKAGE_ADDED)) {
            String packageName = intent.getDataString();
            Log.e(TAG, packageName + "安装成功");
        } else if (intent.getAction().equals(Intent.ACTION_PACKAGE_REPLACED)) {
            String packageName = intent.getData().getSchemeSpecificPart();
            Log.e(TAG, packageName + "替换成功");
        } else if (intent.getAction().equals(Intent.ACTION_PACKAGE_REMOVED)) {
            String packageName = intent.getData().getSchemeSpecificPart();
            Log.e(TAG, packageName + "卸载成功");
        }
    }
}

在AndroidManifest.xml 添加

<receiver
        android:name=".PackageInstalledReceiver"
        android:enabled="true"
        android:exported="true">
        <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" />
              <data android:scheme="package" />
        </intent-filter>
</receiver>

注意:一定要添加这个标签和属性值:<data android:scheme="package" /> //直接复制添加即可,不要改天任何参数;

第二种:

Android 8.0之后的版本,需要动态注册广播接收器,不能再清单文件中静态注册了;

例如:在Activity中oncreate方法中添加register();

private void register() {
    IntentFilter intentFilter = new IntentFilter();
    intentFilter.addAction(Intent.ACTION_PACKAGE_ADDED);
    intentFilter.addAction(Intent.ACTION_PACKAGE_REMOVED);
    intentFilter.addAction(Intent.ACTION_PACKAGE_REPLACED);
    intentFilter.addDataScheme("package");
    registerReceiver(new PackageInstalledReceiver(), intentFilter);

}

为了防止内存泄漏,动态注册广播别忘了注销注册的广播;

@Override
protected void onDestroy() {
    super.onDestroy();
    unregisterReceiver(receiver);
}

不同的操作发送不同的广播如下:

新安装

安装新APP发送的广播:android.intent.action.PACKAGE_ADDED

升级

覆盖安装APP发送的广播:

android.intent.action.PACKAGE_REMOVED //先卸载

android.intent.action.PACKAGE_ADDED //在安装

android.intent.action.PACKAGE_REPLACED //替换完成

卸载

卸载APP发送的广播:android.intent.action.PACKAGE_REMOVED

以上是关于监听App安装卸载的系统广播的主要内容,如果未能解决你的问题,请参考以下文章

Android番外篇 监听安卓手机中的应用安装与卸载

Android实战开发篇 监听应用APK卸载覆盖安装的广播无法接受的问题解决

Android实战开发篇 全网最详细广播监听应用APK卸载覆盖安装!!!

应用的安装卸载更新监听

Android广播篇 系统监听:USB的插拔

Android广播篇 系统监听:USB的插拔