【问题标题】:Filtering an Android Broadcast receiver by action and extra通过操作和额外过滤 Android 广播接收器
【发布时间】:2026-02-04 11:30:01
【问题描述】:

我可以通过操作过滤我的 Android 应用程序中的广播。例如:

 <receiver android:name=".receiver.TasksModifiedReceiver">
        <intent-filter>>
            <action android:name="myapp.TASKS_MODIFIED_ACTION" />
        </intent-filter>
    </receiver>

但是,我可以通过意图中提供的“附加”进一步过滤它们吗?

例如,应用程序 A 发送一个广播:

Intent taskBroadcastIntent = new Intent();
taskBroadcastIntent.setAction(ApplicationConstants.TASKS_MODIFIED_BROADCAST_ACTION);
taskBroadcastIntent.putExtra("TaskType", taskType);
taskBroadcastIntent.putExtra("UserName", CommonCache.getCommonCache().getValue(CommonCache.USER_NAME));
taskBroadcastIntent.putExtra("Environment", Constants.ENVIRONMENT);
context.sendBroadcast(taskBroadcastIntent);

现在,如果“TaskType”额外设置为“task1”,应用程序 B 应该只接收广播, 如果“TaskType”额外设置为“task2”,应用程序 C 应该只接收广播。

任何有用的建议将不胜感激。 我在 Android 开发者文档中找不到这个功能。

【问题讨论】:

    标签: android android-intent broadcastreceiver intentfilter


    【解决方案1】:

    我认为这是不可能的。但这是我要做的,

    创建一个通用接收器,您将接收应用上下文和意图。因此,使用 getStringExtra("TaskType") 获取 taskType 并基于该触发相应的广播意图。

    【讨论】:

    • 谢谢,我们已经在我们的接收器中以编程方式检查“TaskType”,并且仅在它与我们想要的匹配时进行处理。希望避免这种程序化检查