2010-06-26 53 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 2012-11-11 01:30:34

+0

進一步說明:'String BROADCAST_ACTION =「android.net.conn.CONNECTIVITY_CHANGE」;''''''''''''''''''另外,我希望整個應用程序都有一個行爲,難道你不能在擴展'Application'的類中使用代碼嗎? – Sunshinator 2016-11-15 16:13:06