Doze模式下的网络访问

12

当Doze处于活动状态时,是否可以使用网络访问?如果我的应用程序忽略电池优化而不进入待机状态,但仍然受到Doze的影响。我是否遗漏了什么?

2个回答

10

即使您的应用程序忽略电池优化,休眠模式下网络访问也会被禁用。唯一从休眠模式唤醒设备并获取网络访问的方法是向您的应用程序发送高优先级的Google Cloud消息。

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

Intent intent = new Intent();
String packageName = context.getPackageName();
PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
//battery optimizations toggle
if (pm.isIgnoringBatteryOptimizations(packageName))
    //give the user the option to enable battery optimizations again
    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商店中移除。


2
很遗憾,这并非如此。将您的应用程序列入“忽略电池优化”白名单不会影响其在Doze模式下的行为。请参见此处:https://code.google.com/p/android-developer-preview/issues/detail?id=2225#c11。 - sec_aw
2
请注意,当启用电池优化时,setExactAndAllowWhileIdle 不会在待机模式下触发警报。对我来说,使用 setExactAndAllowWhileIdle 并禁用电池优化是在待机模式下获取网络访问的唯一方法。 - M66B
3
setExactAndAllowWhileIdle会像预期的那样唤醒设备,但在待机模式下每15分钟仅唤醒一次。这取决于您使用的时间。然而,当系统唤醒时,根据文档,您有10秒钟时间进行某些操作。 - greywolf82
10
嗯,if是什么意思?据我所知,你使用这两个“Intent”操作的决定取决于是否想请求“REQUEST_IGNORE_BATTERY_OPTIMIZATIONS”权限,而不是你是否已经在白名单上。我有遗漏什么吗? - CommonsWare
12
请注意不要忽略电池优化——我的应用程序因请求“REQUEST_IGNORE_BATTERY_OPTIMIZATIONS”而被谷歌应用商店无预先通知地暂停,尽管免除应用程序的电池优化对于我的应用程序功能至关重要,而且由于技术原因我不能使用GCM。 - Elad Nava
显示剩余15条评论

0
根据文档,您现在可以为您的应用程序设置前台通知,这将违反待机模式,使您的应用程序能够访问网络。

请注意,“如果设备长时间处于空闲状态,则系统允许闲置应用程序每天左右进行一次网络访问”。这在大多数情况下不适用。 - Quicksilver

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接