连接更改当手机处于睡眠模式时,广播接收器不会触发

时间:2016-12-09 09:53:41

标签: android broadcastreceiver sleep-mode

我为我的应用设置了网络状态更改Broadcast Receiver。即使手机处于睡眠模式,我也需要接收wifi连接断开事件。这在手机正在充电和睡眠时有效,但在没有进入睡眠状态时则无效。

这是代码

public class NetworkConnectionReceiver extends WakefulBroadcastReceiver {
public static final String INTENT_CONNECTIVITY_CHANGE = "android.net.conn.CONNECTIVITY_CHANGE";

@Override
public void onReceive(Context context, Intent intent) {
    if (intent.getAction().equalsIgnoreCase(INTENT_CONNECTIVITY_CHANGE)) {
        NetworkChangedEvent event = new NetworkChangedEvent();
        NetworkInfo activeNetworkInfo = intent.getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO);
        boolean wifiConnected = activeNetworkInfo != null
                && activeNetworkInfo.isConnected()
                && activeNetworkInfo.getType() == ConnectivityManager.TYPE_WIFI;

        if (wifiConnected) {
            // start a service here
        } 
    }
}
}

这是它在manifest中的注册方式

 <receiver
        android:name=".NetworkConnectionReceiver"
        android:enabled="true"
        android:exported="true">
        <intent-filter>
            <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
            <action android:name="android.net.wifi.STATE_CHANGE" />
        </intent-filter>
    </receiver>

我知道Marshmallow及以上设备中与打盹模式相关的问题,但我甚至没有在手机处于睡眠状态且未连接充电器的情况下在Kitkat设备中接收事件。

1 个答案:

答案 0 :(得分:1)

使用WakefulBroadcastReceiver

  

帮助实现接收设备唤醒事件的BroadcastReceiver的通用模式,然后将工作传递给服务,同时确保设备在转换期间不会重新进入休眠状态。

     

该课程负责为您创建和管理部分唤醒锁;您必须请求WAKE_LOCK权限才能使用它。