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

本文介绍了如何在Android系统中监听应用程序的安装、卸载和替换事件。对于Android 8.0之前的版本,可以通过在AndroidManifest.xml中静态注册PackageInstalledReceiver广播接收器来实现。而对于Android 8.0及更高版本,由于系统限制,需要在Activity中动态注册和注销广播接收器。文章详细展示了不同版本下的实现代码,并列举了相关的关键广播动作,如ACTION_PACKAGE_ADDED、ACTION_PACKAGE_REMOVED和ACTION_PACKAGE_REPLACED。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

### Android 系统中的安装卸载广播机制 在Android系统中,当应用程序被安装卸载时会触发特定的广播消息。这些广播允许其他应用监听并响应这类事件。 对于应用安装完成之后,系统会发出`Intent.ACTION_PACKAGE_INSTALLED`广播[^1]。此广播携带了新安装包的信息,例如包名和其他元数据。为了确保安全性和隐私保护,只有具有适当权限的应用才能接收到此类广播。 同样,在执行应用卸载操作期间以及完成后也会发送相应的广播通知给所有感兴趣的接收者。具体来说,在卸载过程结束之时会有`Intent.ACTION_PACKAGE_REMOVED`广播被分发出去。它包含了有关已移除软件包的数据供订阅该类事件的应用程序处理。 以下是注册一个用于监听上述两种情况之一(即APP安装完毕)的服务组件示例代码: ```java // 创建一个新的BroadcastReceiver实例来捕获ACTION_PACKAGE_INSTALLED意图动作 public class PackageInstalledReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { String action = intent.getAction(); if (action.equals(Intent.ACTION_PACKAGE_ADDED)) { // 应用已被成功添加到设备上 Uri data = intent.getData(); Log.d("PackageInstall", "New package installed:" + data.getSchemeSpecificPart()); } else if(action.equals(Intent.ACTION_PACKAGE_REMOVED)){ // 应用已经被删除 Uri data = intent.getData(); Log.d("PackageRemoved","Package removed:"+data.getSchemeSpecificPart()); } } } ``` 通过这种方式可以有效地监控安卓平台上发生的任何重要变更,并据此采取相应措施。
评论 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、付费专栏及课程。

余额充值