Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/219.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 最新的Android更新是否会禁用电池优化白名单?_Java_Android_Media Player_Chromecast_Android Doze - Fatal编程技术网

Java 最新的Android更新是否会禁用电池优化白名单?

Java 最新的Android更新是否会禁用电池优化白名单?,java,android,media-player,chromecast,android-doze,Java,Android,Media Player,Chromecast,Android Doze,TL;DR 安卓7.1.2的“2017年6月5日”安全更新是否导致安卓开始忽略电池优化白名单(即让应用程序禁用瞌睡模式的东西) 如果是这样的话,如果一个应用程序有一个需要CPU和wifi保持持续活动的用例,那么它现在怎么能通过编程禁用打盹模式呢 上下文 我有一个Android应用程序,支持将本地音频文件传送到联网的Chromecast接收器(使用嵌入式HTTP服务器将文件内容传送到接收器) 为了在安卓M上实现这一点(在设备播放音频时,Chromecast会话不会中断,但在其他情况下处于空闲状态)

TL;DR


安卓7.1.2的“2017年6月5日”安全更新是否导致安卓开始忽略电池优化白名单(即让应用程序禁用瞌睡模式的东西)

如果是这样的话,如果一个应用程序有一个需要CPU和wifi保持持续活动的用例,那么它现在怎么能通过编程禁用打盹模式呢

上下文

我有一个Android应用程序,支持将本地音频文件传送到联网的Chromecast接收器(使用嵌入式HTTP服务器将文件内容传送到接收器)

为了在安卓M上实现这一点(在设备播放音频时,Chromecast会话不会中断,但在其他情况下处于空闲状态),我必须使用中的方法来禁用瞌睡模式

具体而言,在我的
AndroidManifest.xml
中,我有:

<uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS" />
…我还以标准方式获取唤醒/wifi锁定,同时Chromecast播放处于活动状态:

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(); 
该应用程序出现在电池白名单中,就在几周前,一切正常。然而,该应用程序现在被困在打盹模式

测试设备没有改变;这是一个运行安卓7.1.2的谷歌像素。唯一的软件变化是我安装了2017年6月5日的安全补丁

Android系统日志报告以下内容(在主动播放时):

此时(延迟几秒钟后)调用Chromecast
onConnectionSuspended()
方法,值为
CAUSE\u NETWORK\u LOST
。这当然是因为打盹模式已经关闭了wifi


安卓7.1.2的“2017年6月5日”安全更新是否导致安卓开始忽略电池优化白名单(即让应用程序禁用瞌睡模式的东西)

如果是这样的话,如果一个应用程序有一个需要CPU和wifi保持持续活动的用例,那么它现在怎么能通过编程禁用打盹模式呢

编辑

下面是一个简单的示例项目,演示了这个问题(至少在我的Google Pixel上):

这是我得到的结果,在我的像素上运行测试:


“Android 7.1.2的‘2017年6月5日’安全更新是否导致Android开始忽略电池优化白名单”——如果是这样,那应该是一个bug。如果您可以创建一个简单的测试用例,请提交一个问题。就我个人而言,我很想看看它。我不知道testcase(这看起来像是一座陡峭的山,为了证明存在漏洞),但我可以确认,在旧设备(Sony Xperia)上运行的同一个应用程序在应用程序保持唤醒/wifi锁定时不会杀死网络/CPU。“这看起来像是一座陡峭的山,为了证明有一只虫子“--那么,当人们无法帮助你时,请不要抱怨,如果问题解决得很慢,等等。例如,问题可能不是普遍存在的,但仅限于谷歌像素,或者在连接到某个特定品牌的WiFi接入点时仅限于谷歌像素,或者其他更狭隘的东西恰好覆盖了你的情况。如果没有再现性,你的分析只是一个数据点,而不是行动的号召;只是问问而已。虽然我认为有些人的工作就是防止这些bug的发生,并在它们发生时修复它们。他们中的一个提出一个最小的测试用例是最合适的。让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(); 
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