我有一个BroadcastReceiver(#1),它一直运行以捕获事件。当事件发生时,可能需要对特定活动进行UI更改(如果该活动处于活动状态)。为此,我让BroadcastReceiver#1创建一个新的意图,该意图由活动上的第二个BroadcastReceiver(#2)捕获,并且仅在活动未暂停时注册/取消注册...如下所述: Inform Activity from a BroadcastReceiver ONLY if it is in the foreground
一切正常......但是,现在我希望BroadcastReceiver#1在活动未对焦时或在焦点处于焦点但是选择不处理事件时发布状态通知。因此,Activity(如果活动)需要某种方式与BroadcastReceiver#1进行通信。
我以为我会让BroadcastReceiver#1产生一个线程,该线程会在X秒过后通过事件发布事件...此线程将有一个第三个广播接收器#3,如果接收活动选择处理事件,它可以发送“不要发布该通知”意图,该意图将被BroadcastReceiver#3捕获以中止通知。但是,这不起作用,因为Android不允许一个BroadcastReceiver注册另一个BroadcastReceiver。
答案 0 :(得分:0)
从未使用过,但应该有效。 就在发送广播查询之前,是否有任何广播接收者已准备好处理你的意图。
PackageManager pm = context.getPackageManager();
List<ResolveInfo> mList = pm.queryBroadcastReceivers(intent, 0);
if(mList.size() > 0){
//broadcast intent
}else{
//post notification
}
编辑: 由于这不适用于通过活动注册的接收方,因此您可以跟踪注册并使用Application类取消注册。 由于正在使用相同的应用程序和流程,您可以进行帮助功能来注册和取消注册并保持注册计数并决定是发布通知还是广播意图