2010-06-26 3 views
22

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

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

ответ

37

Передача - уведомление. :) Если вы хотите сказать, начать работу или услугу и т. Д. На основе полученной широковещательной передачи, вам нужен автономный широковещательный приемник, и вы поместите его в свой файл манифеста. Однако, если вы хотите, чтобы ваша деятельность реагировала на трансляции, вы создаете экземпляр широковещательного приемника в своей деятельности и регистрируете его там.

Узор я использую:

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 я делаю все, что необходимо для того, чтобы активность реагировала так, как я хочу, когда он получает трансляцию.

+9

Итак, вы должны определить приемник внутри действия? Что делать, если вам нужно поведение во всем приложении? – shim

+0

Дальнейшие уточнения: 'String BROADCAST_ACTION =" android.net.conn.CONNECTIVITY_CHANGE ";' Кроме того, я хочу, чтобы поведение во всем приложении, вы не могли взять код в классе, расширяющем 'приложение'? – Sunshinator

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