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

Android:带dataScheme的IntentFilter如何匹配无数据Intent并监听两类广播

解决方案

要同时监听带package scheme的应用包变化广播,以及无数据的壁纸变更广播,你需要为同一个广播接收器注册两个独立的IntentFilter——因为单个IntentFilter的scheme规则会作用于所有添加的Action,无法同时兼容有scheme和无scheme的Intent匹配。

修改后的注册代码

actionReceiver = new ActionReceiver();

// 第一个IntentFilter:处理应用包变化广播(带package scheme)
IntentFilter packageFilter = new IntentFilter();
packageFilter.addAction(Intent.ACTION_PACKAGE_ADDED);
packageFilter.addAction(Intent.ACTION_PACKAGE_REMOVED);
packageFilter.addDataScheme("package");
ContextCompat.registerReceiver(this, actionReceiver, packageFilter, ContextCompat.RECEIVER_EXPORTED);

// 第二个IntentFilter:处理壁纸变更广播(无scheme)
IntentFilter wallpaperFilter = new IntentFilter();
wallpaperFilter.addAction(Intent.ACTION_WALLPAPER_CHANGED);
ContextCompat.registerReceiver(this, actionReceiver, wallpaperFilter, ContextCompat.RECEIVER_EXPORTED);

原理说明

  • 第一个packageFilter专门匹配携带package scheme的ACTION_PACKAGE_ADDED/ACTION_PACKAGE_REMOVED广播,符合系统对这类广播的Intent数据要求。
  • 第二个wallpaperFilter仅配置ACTION_WALLPAPER_CHANGED,不设置任何scheme,因此只会匹配无数据的壁纸变更Intent。
  • 同一个actionReceiver会收到两类Filter匹配到的广播,你只需在Receiver的onReceive方法中通过intent.getAction()区分处理即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 06:04:58