26

アクティビティがあり、ブロードキャスト イベントに応答する必要があります。アクティビティが同時にブロードキャストレシーバーになることはできないので、ブロードキャストレシーバーを作成しました。

私の質問は、ブロードキャスト レシーバーからアクティビティを通知するにはどうすればよいですか? これは一般的な状況だと思いますが、このための設計パターンはありますか?

4

1 に答える 1

39

ブロードキャストは通知です。:) 受信したブロードキャストに基づいてアクティビティやサービスなどを開始したい場合は、スタンドアロンのブロードキャストレシーバーが必要で、それをマニフェストファイルに入れます。ただし、アクティビティ自体がブロードキャストに応答するようにする場合は、アクティビティでブロードキャスト レシーバーのインスタンスを作成し、そこに登録します。

私が使用するパターンは次のとおりです。

public class MyActivity extends Activity {
    private BroadcastReceiver receiver = new BroadcastReceiver() {
        @Override
        public void onReceive(...) {
            ...
        }
   });

    public void onResume() {
        super.onResume();

        IntentFilter filter = new IntentFilter();
        filter.addAction(BROADCAST_ACTION);

        this.registerReceiver(this.receiver, filter);
    }

    public void onPause() {
        super.onPause();

        this.unregisterReceiver(this.receiver);
    }
}

したがって、このようにして、クラスが作成されるときにレシーバーがインスタンス化されます (onCreate でも実行できます)。次に、onResume/onPause で、レシーバーの登録と登録解除を処理します。次に、レシーバーのonReceive方法で、アクティビティがブロードキャストを受信したときに希望する方法で反応させるために必要なことは何でもします。

于 2010-06-26T03:58:01.320 に答える