0

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

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

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

3 回答 3

1

您必须在Activity.onResume()方法上以编程方式注册 BroadcastReceiver ,并在Activity.onPause方法上取消注册。

例子

@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);
}
于 2013-05-07T16:47:07.173 回答
1

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

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

I hope its help you.
于 2018-05-23T08:46:21.150 回答
0

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

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

于 2013-05-07T17:13:25.750 回答