【问题标题】:How to continuously active Internet on doze mode Marshmallow and Nougat如何在打瞌睡模式棉花糖和牛轧糖中持续活跃互联网
【发布时间】:2017-02-15 06:07:27
【问题描述】:

我正在开发实时位置跟踪应用程序,并通过使用前台服务将当前位置更新到服务器。

现在我可以在设备处于深度睡眠状态时保持应用程序处于活动状态。但是由于网络访问在打盹模式下被暂停,我无法在服务器上更新它。
根据谷歌开发者指南的建议,我们可以通过使用高优先级 FCM 消息来解决这个问题。 但在我的情况下,如何在网络访问暂停时通知服务器推送通知(需要通过操作系统或手动识别互联网访问禁用)。

【问题讨论】:

  • 你找到解决办法了吗?
  • 还没有,但我仍在寻找合适的替代解决方案。
  • 如果你发现了,请提醒我。提前致谢
  • 实际上我可以使用 GcmTaskService 在 M 和 N 上执行此操作。虽然,这不再适用于 O

标签: android android-service


【解决方案1】:

一种方法是注册行动-

"android.os.action.DEVICE_IDLE_MODE_CHANGED" 

一旦设备模式发生变化,这将广播,然后使用以下方法确定设备处于打瞌睡/非打瞌睡状态:

PowerManager pm = (PowerManager)context.getSystemService(Context.POWER_SERVICE);

boolean isDeviceIdle = pm.isDeviceIdleMode();

【讨论】:

    【解决方案2】:

    尝试检查 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());
    }
    

    【讨论】:

    • 当设备处于节电模式限制后台数据模式时返回Blocked
    • 当操作系统或手动禁用互联网时,在这两种情况下“networkInfo”都返回null。
    猜你喜欢
    • 2016-01-31
    • 2017-01-06
    • 2017-07-22
    • 1970-01-01
    • 2017-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多