2016-10-16 3 views
1

Обычно для одного IntentService можно определить слушателя широковещательного приемника, как это в OnCreate это деятельность (в) метод (например)Можно ли использовать один BroadcastReceiver для нескольких IntentServices?

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

И вы зарегистрировать приемник, как это (также в OnCreate()):

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

И тогда вы начинаете IntentService с:

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

И в IntentService отправлять сообщения назад к приемнику с:

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

, который запускает onReceive метод, описанный ранее.

А потом разрегистрировать приемники, в методе OnDestroy вы можете сделать:

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

в файле манифеста, вы добавляете к вашим услугам:

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

Я хочу получать трансляции из нескольких IntentServices в той же деятельности.

Вам нужен один приемник на IntentService? Как и в случае, если я делаю n IntentServices, мне необходимо зарегистрировать приемники n, сделать n слушателем и отменить регистрацию n приемников в onDestroy?

ответ

3

Да, вы можете использовать один широковещательный приемник в одном действии, который будет обрабатывать несколько намерений с разными службами. Я бы рекомендовал добавить в свой широковещательный приемник несколько шаблонов намерения, чтобы отличить от того, с какой услугой вы получаете трансляцию.

4

Способ фильтрации мультипликатор actions с одним BroadcastReceiver, чтобы добавить их к 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 
     } 
    } 
};