Android 为什么BroadcastReceiver接收到两个相同的广播
我正在尝试使用广播接收器从服务接收新消息。但是广播接收器总是接收两次广播。。。 接收器代码:Android 为什么BroadcastReceiver接收到两个相同的广播,android,broadcastreceiver,Android,Broadcastreceiver,我正在尝试使用广播接收器从服务接收新消息。但是广播接收器总是接收两次广播。。。 接收器代码: private class RecentBroadcastReceiver extends BroadcastReceiver { public void onReceive(Context context, Intent intent) { Bundle messageBundle = intent.getExtras(); IChatCSMessage me
private class RecentBroadcastReceiver extends BroadcastReceiver {
public void onReceive(Context context, Intent intent) {
Bundle messageBundle = intent.getExtras();
IChatCSMessage message = (IChatCSMessage) messageBundle.get("message");
String sender = message.getSender().getUserId();
addRecentBuddy(sender.trim());
recentBuddyAdapter.notifyDataSetChanged();
allMessages.get(sender).add(message);
Log.i("RECENT_RECEIVER", "RECEIVING MESSAGE:" + message.getMessage());
}
}
public void initReceiver() {
IntentFilter myIntentFilter = new IntentFilter();
myIntentFilter.addAction("com.ichat.message");
recentBroadcastReceiver = new RecentBroadcastReceiver();
registerReceiver(recentBroadcastReceiver, myIntentFilter);
}
广播为:
Intent intent = new Intent("com.ichat.message");
intent.putExtra("message", message);
IChatClientService.this.sendBroadcast(intent);
有人能帮我吗?你真的没有提供任何证据证明在这两种情况下,意图包含相同的扩展数据。我这样说是因为a)您从未记录传入的操作,b)您没有通过调用getStringExtra()来获取带有键“message”的扩展数据(如果扩展数据的内容确实是字符串),以及c)您没有向我们提供logCat列表 我建议执行以下调试步骤:
简言之,您的BroadcastReceiver正在接收两个意图,可能都带有动作“com.ichat.message”。如果广播仅在应用程序中的一个位置,则该位置将被访问两次。这是一个常见错误,您可能将广播接收器放在manifest.xml中,其目的定义如下:
<receiver android:name="RecentBroadcastReceiver">
<intent-filter>
<action android:name="com.ichat.message" />
</intent-filter>
</receiver>
并在代码中创建了一个示例。这实际上是创建两个意图过滤器,因此可以删除xml中的意图过滤器,并且应该只看到一个广播 可能您的
initReceiver()
被调用了两次?也许你也在清单文件中注册了它?@fiddler不,只是在java代码中