Изменение подключения Широковещательный приемник не срабатывает, когда телефон находится в спящем режиме

У меня есть настройка изменения состояния сети Broadcast Receiver для моего приложения. Мне нужно получать события подключения-отключения Wi-Fi, даже когда телефон находится в спящем режиме. Это работает, когда телефон заряжается и находится в спящем режиме, но не работает, когда он не в спящем режиме.

вот код

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
        } 
    }
}
}

вот как он зарегистрирован в манифесте

 <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, когда телефон находится в спящем режиме и не подключен к зарядному устройству.


person Abhishek Bansal    schedule 09.12.2016    source источник


Ответы (1)


Используйте WakefulBroadcastReceiver:

Помощник для общего шаблона реализации BroadcastReceiver, который получает событие пробуждения устройства, а затем передает работу службе, при этом гарантируя, что устройство не вернется в спящий режим во время перехода.

Этот класс позаботится о создании частичной блокировки пробуждения и управлении ею; вы должны запросить разрешение WAKE_LOCK, чтобы использовать его.

person DroidBender    schedule 09.12.2016
comment
пробую это прямо сейчас, но я не уверен, так как думаю, что сама трансляция не запускается в первую очередь. - person Abhishek Bansal; 09.12.2016
comment
Обновление: на одном устройстве работает, а на другом нет. Принимаю ответ на данный момент. - person Abhishek Bansal; 10.12.2016