2016-10-16 4 views
1
あなたは(たとえば)活動ののonCreate()メソッド

1つのBroadcastReceiverを複数のIntentServicesに使用できますか?

broadcastReceiver = new BroadcastReceiver() { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     //get stuff from the intent and do whatever you want 
    } 
}; 

に、このような放送受信機のリスナーを定義することができますそして、あなたは(ものonCreate()で)このような受信機に登録単一IntentServiceのための通常

LocalBroadcastManager.getInstance(this) 
    .registerReceiver(broadcastReceiver, new IntentFilter("my_intent_service")); 

そしてあなたがIntentServiceを開始します。

Intent intent = new Intent(this, MyIntentService.class); 
startService(intent); 

そしてIntentServiceにあなたが戻ってメッセージを送信前述しonReceive方法をトリガ

Intent broadcastIntent = new Intent("my_intent_service"); 
broadcastIntent.putExtra("whateverData", whateverData); 
LocalBroadcastManager.getInstance(this).sendBroadcast(broadcastIntent); 

:を有する受信機に関する。その後、

とレシーバの登録を解除するには、あなたが行うことができますonDestroyメソッドで:マニフェストファイルの

LocalBroadcastManager.getInstance(this).unregisterReceiver(broadcastReceiver); 

、あなたがあなたのサービスのために追加します。

<service 
    android:name=".MyIntentService" 
    android:exported="false" /> 

私は、複数の放送を受信したいです同じアクティビティのIntentServices。

IntentServiceごとに1台の受信機が必要ですか?で、私が作る場合、n IntentServicesはn受信者を登録する必要があります、nリスナーを作成し、onDestroyのn受信者の登録を解除しますか?

答えて

3

はい、1つのアクティビティで1つのブロードキャストレシーバを使用できます。これは、複数のインテントfron differentsサービスを処理します。 複数のintentFilterをブロードキャストレシーバに追加して、どのサービスからブロードキャストを取得するのかを区別することをお勧めします。 1 BroadcastReceiverで複数のactionsをフィルタリングする

4

方法はIntentFilterに追加することです:

IntentFilter intentFilter = new IntentFilter(); 
intentFilter.addAction("my_intent_service1"); // Action1 to filter 
intentFilter.addAction("my_intent_service2"); // Action2 to filter 
LocalBroadcastManager.getInstance(this).registerReceiver(mBroadcastReceiver, intentFilter); 

そして、あなたのBroadcastReceiver中:

private BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     if (intent.getAction().equals("my_intent_service1")) { 
      // Action 1 
     } else if (intent.getAction().equals("my_intent_service2")) { 
      // Action 2 
     } 
    } 
}; 
関連する問題