当Doze处于活动状态时,是否可以使用网络访问?如果我的应用程序忽略电池优化而不进入待机状态,但仍然受到Doze的影响。我是否遗漏了什么?
当Doze处于活动状态时,是否可以使用网络访问?如果我的应用程序忽略电池优化而不进入待机状态,但仍然受到Doze的影响。我是否遗漏了什么?
即使您的应用程序忽略电池优化,休眠模式下网络访问也会被禁用。唯一从休眠模式唤醒设备并获取网络访问的方法是向您的应用程序发送高优先级的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商店中移除。
if
是什么意思?据我所知,你使用这两个“Intent”操作的决定取决于是否想请求“REQUEST_IGNORE_BATTERY_OPTIMIZATIONS”权限,而不是你是否已经在白名单上。我有遗漏什么吗? - CommonsWare