2

BroadcastReceiver を使用して、サービスから新しいメッセージを受信しようとしています。ただし、BroadcastReceiver は常にブロードキャストを 2 回受信します... レシーバー コード:

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);

誰でも私を助けることができますか?

4

2 に答える 2

0

どちらの場合も、インテントに同じ拡張データが含まれているという証拠はありません。これを言うのは、a) 着信アクションをログに記録しない、b) getStringExtra() を呼び出してキー「メッセージ」を持つ拡張データを取得しない (実際にその拡張データの内容が文字列である場合)、および c ) logCat リストを提供していない。

デバッグには次の手順をお勧めします。

  1. 着信インテント アクションの Log.i を呼び出します。
  2. 「メッセージ」キーの着信インテントの値について、Log.i を呼び出します。
  3. 結果を投稿します。
  4. ブロードキャストインテントを送信するときの「メッセージ」のタイプと値が何であるかを正確に示すコードを投稿してください

つまり、BroadcastReceiver は 2 つのインテントを受信して​​います。おそらく両方ともアクション「com.ichat.message」を使用しています。ブロードキャストがアプリ内の 1 つの場所だけにある場合、その場所に 2 回到達しています。

于 2012-11-21T23:10:15.413 に答える