3

コードからManifest.xmlで定義されたBroadcastReceiverの参照を取得する方法はありますか?Android - マニフェストで定義されたBroadcastReceiverへの参照を取得する

私のケースでは、Manifest.xmlに含める必要があるBroadcastReceiverを使用しています。しかし、私はコード内から再利用したい機能を持っています。したがって、別の同様のBroadcastReceiverを作成し、コードからインスタンス化する代わりに、既存のものへの参照を取得したいと思います。

追加情報:

私の目標は、私の活動から、私BroadcastReceiverのイベントをサブスクライブすることである - 私は再利用したいイベントを - 代わりに私の活動では、この受信機の別のインスタンスを作成する私は考え既存のものへの参照を得るのが好きです。

+1

マニフェストに登録されているレシーバクラスには、継続的に存在するインスタンスがありません。新しいインスタンスは、ブロードキャストを処理する必要があるたびに作成されます。 'Activity'で同じクラスを使いたい場合は、独自の' new'インスタンスを作成し、それを動的に登録してください。 –

+1

@MikeM。私が探していたものを答えとして投稿してください。 –

答えて

4

マニフェストにBroadcastReceiverを登録すると、そのインスタンスを登録するのではなく、そのクラスを登録します。 <receiver>が処理する必要のあるブロードキャストが発生するたびに、新しいインスタンスが作成されるため、記述しているときに実際に参照を取得することはできません。

マニフェストにも静的に登録されているReceiverクラスのインスタンスを動的にインスタンス化して登録するのは問題ありません。しかし、静的に登録されたクラスが実行される場合、つまり動的に登録されたクラスと同じブロードキャストを処理する場合は、ActivityをReceiverクラスから通知することを検討してください。受信機を本質的に複製するのではなく、LocalBroadcastManager、別のイベントバスの実装などがあります。

0

すでに登録されているBroadcastReceiverに「参照を取得する」必要はありません。

BroadcastReceiverで処理できるIntentを送信すると、Contextのコードの任意のポイントからアクションがトリガーされます。

context.sendBroadcast(intent); 

あなたがBroadcastReceiverを呼び出さずに「純粋ロジック」を呼び出したい場合は、いくつかのPOJOクラスにそれからロジックを抽出し、BroadcastReceiverを省略し、直接そのクラスを呼び出す必要があります。

class LocationReceiver extends BroadcastReceiver { 

     private SomeAction action; 

     public LocationReceiver(){ 
      action = new SomeAction(); 
     } 

     @Override 
     public void onReceive(Context context, Intent intent) { 
      action.execute(); 
     } 
    }; 

BroadcastReceiver単に​​を呼び出すことができますが、それは、それがどのように機能するかについては何も知りません。 はコード内のどこにでも再利用でき、BroadcastReceiverについての知識は一切ありません。

Androidクラスにロジックを入れないようにしてください。

POJO Javaクラスに論理を持たせることは、SRPを原則的に生き生きさせ、テストを容易にするために役立ちます。

+0

ありがとうございますが、私は私の問題を理解したとは思わない、私はおそらく十分な詳細を与えていない。私は私のポストを編集しましたので、少しはっきりしています。私はブロードキャストの送信/何らかのアクションの実行に問題はありません。 –

+0

'SomeAction'を' BroadcastReceiver'の外に抽出すると、代わりに 'SomeAction'を購読することができます。さらにユニットテストを書くことができます:) – mklimek

+0

私はあなたが意味するものを参照してください。うん、解決策のように聞こえる。私はもっ​​と一般的なイベントAction OnMyActionを置くのと同じような意味だった。私のBRに自分のBRへの参照を取得し、そのイベントに加入する。 –

関連する問題