我正在开发实时位置跟踪应用程序,并通过使用前台服务将当前位置更新到服务器。
现在我可以在设备深度睡眠时保持应用程序处于活动状态。但是由于网络访问在打瞌睡模式下暂停,我无法在服务器上更新它。
根据谷歌开发者指南的建议,我们可以通过使用高优先级的FCM消息来解决这个问题。但在我的情况下,如何在网络访问暂停时通知服务器推送消息(需要识别OS或手动禁用互联网访问)。
一种方法是登记行动-
"android.os.action.DEVICE_IDLE_MODE_CHANGED"
这将广播一旦设备模式将改变,然后找出设备是在打瞌睡/非打瞌睡使用:
PowerManager pm = (PowerManager)context.getSystemService(Context.POWER_SERVICE);
boolean isDeviceIdle = pm.isDeviceIdleMode();
尝试检查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());
}