Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 为什么BroadcastReceiver接收到两个相同的广播_Android_Broadcastreceiver - Fatal编程技术网

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列表

我建议执行以下调试步骤:

  • 调用Log.i以获取传入的意图操作
  • 调用Log.i以获取“message”键的传入Intent值
  • 发布结果
  • 张贴代码,准确显示发送广播意图时“消息”的类型和值

  • 简言之,您的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代码中