监听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

评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ang_qq_252390816

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值