You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android 8.0(Oreo)中如何使用隐式广播ACTION_PACKAGE_ADDED?

关于用ACTION_PACKAGE_ADDED检测应用安装的问题解答

嘿,我仔细看了你的实现代码,这里有个很关键的点你可能没注意到:从**Android 8.0(API Level 26)**开始,系统对隐式广播做了严格的限制,像ACTION_PACKAGE_ADDED这类隐式广播,已经不能通过Manifest静态注册接收器来接收了——这大概率就是你接收器没触发的原因。

下面给你两种可行的解决方案,按需选择:

方案1:动态注册广播接收器(推荐适配高版本)

在你的Activity或者Service里动态注册接收器,就能绕过这个限制。举个例子:

public class MainActivity extends AppCompatActivity {
    private BroadcastReceiver packageInstallReceiver;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // 初始化接收器逻辑
        packageInstallReceiver = new BroadcastReceiver() {
            @Override
            public void onReceive(Context context, Intent intent) {
                if (Intent.ACTION_PACKAGE_ADDED.equals(intent.getAction())) {
                    Uri data = intent.getData();
                    String packageName = data.getEncodedSchemeSpecificPart();
                    // 这里写你要执行的代码
                    Log.d("InstallDetect", "检测到新应用安装:" + packageName);
                }
            }
        };

        // 设置IntentFilter,记得要加package的data scheme
        IntentFilter filter = new IntentFilter();
        filter.addAction(Intent.ACTION_PACKAGE_ADDED);
        filter.addDataScheme("package");

        // 注册接收器
        registerReceiver(packageInstallReceiver, filter);
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        // 一定要记得注销,不然会内存泄漏!
        if (packageInstallReceiver != null) {
            unregisterReceiver(packageInstallReceiver);
        }
    }
}

方案2:兼容Android 7.1及以下版本

如果你的应用需要覆盖API 25及以下的旧设备,静态注册还是有效的,但要确保Manifest里的intent-filter配置正确:

<receiver android:name=".Receiver">
    <intent-filter>
        <action android:name="android.intent.action.PACKAGE_ADDED" />
        <!-- 必须加上这个data scheme,否则匹配不到广播 -->
        <data android:scheme="package" />
    </intent-filter>
</receiver>

额外提醒几个细节

  • 如果你还要监听应用更新的情况,记得在IntentFilter里加上ACTION_PACKAGE_REPLACED这个Action,因为ACTION_PACKAGE_ADDED只会在首次安装时触发。
  • 动态注册的接收器只有在你的组件(Activity/Service)处于活跃状态时才能收到广播,如果需要后台持续监听,得结合前台Service(毕竟Android O及以上对后台Service限制也很严)。
  • 权限方面:接收这个广播不需要额外权限,但如果要获取安装应用的详细信息,Android 11及以上可能需要申请QUERY_ALL_PACKAGES权限,或者在Manifest里声明特定的包名查询权限。

内容的提问来源于stack exchange,提问作者Nolesh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:15:18