Как постоянно активный Интернет в режиме доз Зефир и Нуга

Я работаю над приложением отслеживания местоположения в реальном времени и обновляю текущее местоположение на сервере с помощью функции переднего плана.

Теперь я могу держать приложение активным, пока устройство находится в глубоком сне. Но из-за отключения доступа к сети в режиме «Доза» я не могу обновить его на сервере.
Согласно подсказке руководства разработчика Google, мы можем решить эту проблему, используя высокоприоритетные сообщения FCM. Но в моем случае, как уведомить сервер для push-уведомления, когда сетевой доступ приостановлен (необходимо определить, что доступ в Интернет отключен либо ОС, либо вручную).

Попробуйте проверить статус NetworkInfo

public static boolean isNetBlocked(Context context) { ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo networkInfo = cm.getActiveNetworkInfo(); return networkInfo != null && networkInfo.getDetailedState().name().equals(NetworkInfo.DetailedState.BLOCKED.name()); } 

Одним из способов является регистрация для действий –

 "android.os.action.DEVICE_IDLE_MODE_CHANGED" 

Это будет транслироваться, как только режимы устройства изменятся, а затем выясните, что устройство находится в дозе / без доз, используя:

 PowerManager pm = (PowerManager)context.getSystemService(Context.POWER_SERVICE); boolean isDeviceIdle = pm.isDeviceIdleMode();