【问题标题】:Network access in doze mode打盹模式下的网络访问
【发布时间】:2015-08-31 17:15:21
【问题描述】:

打瞌睡时是否可以使用网络访问?如果我的应用程序忽略了电池优化,则不会进入待机状态,但无论如何它都会受到打瞌睡的影响。我错过了什么吗?

【问题讨论】:

    标签: android android-6.0-marshmallow


    【解决方案1】:

    在打盹模式下网络访问被禁用,无论您的应用是否忽略电池优化。将您的设备从打盹模式唤醒并获得网络访问权限的唯一方法是向您的应用发送高优先级的 Google Cloud Message。

    编辑:可以让 Android 忽略应用程序的电池优化,这会有效地禁用应用程序的打盹模式。但是,这需要使用 setExactAndAllowWhileIdle 方法(每 15 分钟最多唤醒一次)和用户交互,可以这样完成:

    Intent intent = new Intent();
    String packageName = context.getPackageName();
    PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
    if (pm.isIgnoringBatteryOptimizations(packageName))
        intent.setAction(Settings.ACTION_IGNORE_BATTERY_OPTIMIZATION_SETTINGS);
    else {
        intent.setAction(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS);
        intent.setData(Uri.parse("package:" + packageName));
    }
    context.startActivity(intent);
    

    编辑:建议将权限 android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS 添加到清单中。除了建议的解决方案不需要这样做之外,它还会导致您的应用从 Play 商店中删除。

    【讨论】:

    • "...这会有效地为您的应用程序禁用打盹模式" - 不,不幸的是,情况并非如此。将您的应用列入“忽略电池优化”白名单不会影响其在打盹模式下的行为。看这里:code.google.com/p/android-developer-preview/issues/…
    • 请注意,启用电池优化后,setExactAndAllowWhileIdle 在打盹模式下不会触发警报。对我来说,使用 setExactAndAllowWhileIdle 并禁用电池优化是在打盹模式下获得网络访问的唯一方法。
    • setExactAndAllowWhileIdle 按预期唤醒设备,但在打盹模式下每 15 分钟仅唤醒 1 次。这取决于你使用的时间。但是,当系统唤醒时,您有 10 秒的时间按照文档说明执行操作。
    • 嗯,if 是怎么回事? AFAIK,确定您使用这两个Intent 操作中的哪一个是基于您是否要请求REQUEST_IGNORE_BATTERY_OPTIMIZATIONS 权限,而不是您是否已经在白名单上。我错过了什么吗?
    • 小心忽略电池优化 - 我的应用刚刚从 Google Play 暂停,没有事先通知请求REQUEST_IGNORE_BATTERY_OPTIMIZATIONS,即使免除应用的电池优化对我的应用的功能至关重要,我可以'出于技术原因不要使用 GCM。
    【解决方案2】:

    根据documentation,您现在可以为您的应用提供一个前台通知,该通知将无视打盹模式,并且您的应用应该能够访问网络。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-05-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多