3

BroadcastReceiver私は自分のアプリケーションAsyncTaskで異なる結果インジケータとして使用したいと考えてActivitiesAsyncTasksます。私のアプローチは少し間違っているか、何かを逃したと思います。

ここで私がやっていること: まず、メソッドを使用しonCreateてレシーバーを登録しました。私の受信機は次のようになります。BroadcastReceiverregisterReceiver

protected BroadcastReceiver myReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        String msg_for_me = intent.getStringExtra("some_msg");
        Log.i("Tutorial", msg_for_me);
    }
}

私のアプリケーションでは、A と B の活動があります。それぞれに、異なるタスクからメッセージを取得する異なるレシーバーがあります。ところで、はっきりさせておかなければならないのは、A 活動が B 活動を開始するということです。

アクティビティ A でレシーバーを使用し、次にアクティビティ A を使用して B を開始しstartActivityます。アクティビティ B で を実行し、B アクティビティのコンテキストでブロードキャストを送信していますAsyncTaskonPostExecuteしかし、どういうわけかまだアクティビティの受信者がメッセージを取得しています。どちらのレシーバーも内容は同じですが、名前が異なります。

だからここに私の問題があります:

  • メソッドunregisterReceiverで新しいアクティビティを開始したときにすべきですか?onPause
  • BroadcastReceiverそれが私が使用している方法ですか、1回の通話のみですか?メッセージを送信するたびに、何度も登録する必要がありますか?
  • にレシーバーを定義していないと確信していますManifest。これは私が間違っていることだと思います。これでよければ、ブロードキャストの送信中に IntentFilter を使用するにはどうすればよいですか?

不明な質問があれば教えてください。BroadcastReceiver についての手がかりは、素晴らしく、高く評価されます。

4

1 に答える 1

2
  1. はい、アクティビティの一時停止時にブロードキャスト レシーバーを登録解除する必要があります。漏れの可能性です。
  2. ブロードキャスト レシーバーは 1 回の呼び出しには対応していません。これらは、登録されたインテントに対してブロードキャストが行われるたびに呼び出されます。
  3. このように、OnResume で特定の目的のために受信者を登録できます。

mContext.registerReceiver(iReceiver, 新しい android.content.IntentFilter("android.intent.action.BATTERY_CHANGED"));

どこ iReceiver 、

 iReceiver = new IntentReceiver();

private class IntentReceiver extends BroadcastReceiver {
    private final String LOG_TAG="IntentReceiver";

    @Override
    public void onReceive(Context arg0, Intent intent) {

    }
 }

OnPauseで同じものを登録解除します

mContext.unregisterReceiver(iReceiver);
于 2012-08-28T19:20:34.107 に答える