aro*_*oth 5 java android media-player chromecast android-doze
TL; DR
Android 7.1.2的“ 2017年6月5日”安全更新是否导致Android开始忽略电池优化白名单(即让应用程序禁用“打ze”模式的功能)?
如果是这样,如果应用程序需要持续保持CPU和wifi的使用情况,那么现在该如何通过编程方式禁用“打ze”模式?
语境
我有一个Android应用程序,它支持将本地音频文件投射到联网的Chromecast接收器(使用嵌入式HTTP服务器将文件内容流式传输到接收器)。
为了在Android M上实现此功能(就在设备投射音频时没有使Chromecast会话掉落,否则处于空闲状态),我不得不在此答案中使用该方法来禁用打ze模式。
具体来说,AndroidManifest.xml我有:
<uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS" />
Run Code Online (Sandbox Code Playgroud)
...,只要建立Chromecast会话,就会执行以下代码:
if (Build.VERSION.SDK_INT >= 23) {
String packageName = context.getPackageName();
PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
if (! pm.isIgnoringBatteryOptimizations(packageName)) {
//reguest that Doze mode be disabled
Intent intent = new Intent();
intent.setAction(
Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS);
intent.setData(Uri.parse("package:" + packageName));
context.startActivity(intent);
}
}
Run Code Online (Sandbox Code Playgroud)
...并且在Chromecast播放处于活动状态时,我还以标准方式获取唤醒/ wifi锁定:
PowerManager powerManager = (PowerManager) getApplicationContext().getSystemService(Context.POWER_SERVICE);
wakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "myapp-cast-server-cpu");
wakeLock.acquire();
WifiManager wifiManager = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE);
wifiLock = wifiManager.createWifiLock(WifiManager.WIFI_MODE_FULL_HIGH_PERF, "myapp-cast-server-net");
wifiLock.acquire();
Run Code Online (Sandbox Code Playgroud)
该应用程序出现在电池白名单中,而就在几周前,这一切都运行良好。但是,该应用程序现在被打ze睡模式捕获。
测试设备没有改变;这是运行Android 7.1.2的Google Pixel。唯一的软件更改是我安装了2017年6月5日安全补丁。
Android系统日志报告了以下内容(正在积极投射):
06-16 17:44:24.842 1095-1150/? I/DreamManagerService: Entering dreamland.
06-16 17:44:24.846 1095-1145/? I/DreamController: Starting dream: name=ComponentInfo{com.android.systemui/com.android.systemui.doze.DozeService}, isTest=false, canDoze=true, userId=0
Run Code Online (Sandbox Code Playgroud)
此时(经过几秒钟的延迟),我的Chromecast onConnectionSuspended()方法被调用,其值为CAUSE_NETWORK_LOST。这当然是因为打ze模式已关闭wifi。
Android 7.1.2的“ 2017年6月5日”安全更新是否导致Android开始忽略电池优化白名单(即让应用程序禁用“打ze”模式的功能)?
如果是这样,如果应用程序需要持续保持CPU和wifi的使用情况,那么现在该如何通过编程方式禁用“打ze”模式?
编辑
这是一个演示问题的最小示例项目(至少在我的Google Pixel上):
https://github.com/adam-roth/droid-doze-test
这是我在Pixel上运行测试后得到的结果:
| 归档时间: |
|
| 查看次数: |
1273 次 |
| 最近记录: |