当应用暂停或在后台时,避免接收广播接收器

时间:2013-05-07 16:42:39

标签: android broadcastreceiver

我已经注册了设备级别的广播接收器(android.net.wifi.WIFI_STATE_CHANGED),它可以很好地监控WiFi信号,但我只想在应用程序处于活动状态或应用程序处于后台或暂停状态时才能使用Lassen接收类。目前我离开我的应用程序并浏览任何其他应用程序。如果我改变wifi信号(关闭或打开),那么我的Receiver生成事件。我想仅在我的应用程序处于活动状态时生成事件,我不想在任何其他应用程序中接收通知

  <receiver android:name="com.android.mobileTimerClock.WifiReceiver"  >
              <intent-filter>

            <action android:name="android.net.wifi.WIFI_STATE_CHANGED"/>
    </intent-filter>
          </receiver>

3 个答案:

答案 0 :(得分:1)

您必须使用Activity.onResume()方法以编程方式注册广播接收器,并使用Activity.onPause方法取消注册。

Example

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    ...
    // Create the receiver
    receiver = new TimelineReceiver();
    filter = new IntentFilter( UpdaterService.NEW_STATUS_INTENT );
}

protected void onResume() {
    super.onResume();
    super.registerReceiver(receiver, filter,
             "com.marakana.yamba.SEND_TIMELINE_NOTIFICATIONS", null);
}

@Override
protected void onPause() {
    super.onPause();
    unregisterReceiver(receiver);
}

答案 1 :(得分:1)

我很高兴看到你的问题。我认为你在onDestroy()方法中取消注册接收器(),以便你在后台接收广播。如果你想避免它,那么在onPause()中取消注册接收器。

@Override
protected void onPause() {
    super.onPause();
    unregisterReceiver(receiver);
}

I hope its help you.

答案 2 :(得分:0)

Manifest Receiver旨在处理广播事件,即使基本Activity未激活也是如此。实际上,您可以自己拥有一个清单广播接收器(没有任何活动)。如果您不希望根据特定活动的状态调用onReceive(),则无法使用清单接收器。

但是,您仍然可以选择处理事件的方式。在处理事件之前,您可以检查您的活动(或活动)是否处于活动状态(使用ActivityManager)。