2010-06-26 54 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