我正在尝试使用BroadcastReceiver从服务接收新消息。但是BroadcastReceiver总是会收到两次广播...接收器代码:
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);有谁可以帮我?
发布于 2012-11-22 07:10:15
您确实没有提供任何证据来证明在这两种情况下,意图都包含相同的扩展数据。我之所以这样说,是因为a)您从不记录传入的操作,b)您不能通过调用getStringExtra()获得带有键"message“的扩展数据(如果扩展数据的内容确实是一个字符串),以及c)您没有向我们提供logCat清单。
我建议使用以下步骤进行调试:
时准确显示"message”的类型和值< code >G29
简而言之,您的BroadcastReceiver正在接收两个意图,大概都带有动作"com.ichat.message“。如果广播只在您的应用程序中的一个位置,则该位置将被访问两次。
发布于 2013-09-10 00:18:19
这是一个常见的错误,您可能会将广播接收器放入manifest.xml,其意图定义如下:
<receiver android:name="RecentBroadcastReceiver">
<intent-filter>
<action android:name="com.ichat.message" />
</intent-filter>
</receiver>并在您的代码中创建了一个,如示例所示。这实际上是创建两个意图过滤器,因此您可以删除xml中的意图过滤器,并且您应该只看到一个广播。
https://stackoverflow.com/questions/13490521
复制相似问题