2016-01-02 5 views
1

Я пытаюсь использовать BroadcastReceiver для обработки нескольких действий. Приемник зарегистрирован с помощью фильтра намерений, но это ограничивает меня отправкой только приемного типа намерений в приемник (см. Intent.getAction();)Как использовать BroadcastReceiver для обработки нескольких действий?

Это мой класс BroadcastReceiver и способ, которым я хочу обрабатывать действия внутри него.

class MyBroadcastReceiver extends BroadcastReceiver { 
     @Override 
     public void onReceive(Context context, Intent intent) { 
     switch(...){ //the criteria for switching to a particular case 
        ... //some cases to handle here 
     }   
    } 
} 

Место, где я зарегистрировать цель выглядит следующим образом (в классе обслуживания):

@Override 
public void onCreate() { 
    super.onCreate(); 
    mbr = new MyBroadcastReceiver(); 
    this.registerReceiver(mbr, new IntentFilter("MyBroadcastReceiver")); 
} 

Путь, как я делаю вызов выглядит следующим образом (на самом деле я просто установить слушателя к кнопка):

//creating the pending intent 
    PendingIntent myPendingIntent = PendingIntent.getBroadcast(this, 0, new Intent("MyBroadcastReceiver"), 0); 
    //add button listener 
    remoteViews.setOnClickPendingIntent(R.id.my_button, myPendingIntent); 

Таким образом заставляет меня SetAction ("MyBroadcastReceiver") для каждого намерения я хочу перейти к MyBroadcastReceiver.

Однако я хочу передать намерения, которые имеют различные действия, как мне следует продолжить?

Или это нехороший подход и лучше использовать для каждого разного намерения отдельную реализацию BroadcastReceiver с ее собственными IntentFilter?

+0

Не можете ли вы добавить еще одно действие в свой «IntentFilter»? – pskink

+0

Если я добавляю другое намерение, которое имеет другое действие, чем «MyBroadcastReceiver», оно не попадает в широковещательный приемник – Flowryn

+1

, потому что у вашего «IntentFilter» есть только одно связанное с ним действие: добавьте еще один – pskink

ответ

4

BroadcastReceiver может обрабатывать несколько действий, добавьте их в намерениях фильтр

IntentFilter filter = new IntentFilter(); 
filter.addAction("action1"); 
filter.addAction("action2"); 

затем зарегистрировать его с этим фильтром

registerReceiver(mbr, filter); 

и внутри вашего собственного переключателя приемника для действий

switch(intent.getAction()){ 
    case action1: 
     // do something 
     break; 
    case action2: 
     // do something 
     break; 
} 
+0

Спасибо, я проверил, это работает :) – Flowryn

+0

Да, через 2 минуты сайт позволяет принять его – Flowryn

+0

Спасибо большое :) – SaNtoRiaN

1

Вы можете зарегистрировать одно или несколько действий для широковещательного приемника g IntentFilter, как показано ниже: -

IntentFilter filter = new IntentFilter(); 
filter.addAction("Action1"); 
filter.addAction("Action2"); 
filter.addAction("Action3"); 

this.registerReceiver(mbr, filter); 

 Смежные вопросы

  • Нет связанных вопросов^_^