我有一个流媒体应用程序,我想避免屏幕在流媒体播放时关闭。它适用于我的大多数设备,但不适用于某些三星设备(三星 Galaxy S21 Ultra、三星 Galaxy S10 等)。到目前为止我尝试过的:
将其添加到我的活动的 onCreate 视图中
this.getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
在布局 xml 的根组件上添加 keepScreenOn
android:keepScreenOn="true"
使用电源管理器防止屏幕在我的onCreate中关闭
PowerManager powerManager = (PowerManager) this.getSystemService(Context.POWER_SERVICE);
this.wakeLock = powerManager.newWakeLock(PowerManager.FULL_WAKE_LOCK, "test.");
this.wakeLock.acquire();
不管我做什么,三星屏幕锁定会在一段时间后出现,如下图所示
像WAKE_LOCK这样的权限当然会添加到清单中。这看起来很简单,但我不知道如何避免这种情况。我经常收到在三星设备上使用我的应用程序的用户的投诉,例如,当他们使用游戏手柄并且不主动触摸屏幕时,屏幕会不断关闭。在三星设备上如何避免这种情况?它似乎在所有其他设备上运行良好。我之前也检查过很多堆栈溢出条目,但没有找到任何具体内容,但也许我错过了一些东西。有人能指出我正确的方向吗?
我偶然发现了这个: https://dontkillmyapp.com/samsung
2021 年更新:尽管 Android 团队承诺强制 OEM 厂商对非标准应用程序查杀保持透明,但在 Android 11 中,三星引入了新的严格(默认开启)限制。应用程序无法再在前台服务中保持唤醒锁定。这破坏了许多用例,例如健康应用程序现在无法为其用户收集传感器数据。请参阅此处的详细信息并阅读下面的解决方法。
您可以使用下面的代码来做到这一点:
PowerManager powerManager = (PowerManager) getSystemService(POWER_SERVICE);
WakeLock wakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK,
"MyApp::MyWakelockTag");
wakeLock.acquire();
更多信息:Android 文档
我找到了一种让我的 Galaxy a23 保持屏幕常亮的方法