Android 在三星设备上保持屏幕开启

问题描述 投票:0回答:3

我有一个流媒体应用程序,我想避免屏幕在流媒体播放时关闭。它适用于我的大多数设备,但不适用于某些三星设备(三星 Galaxy S21 Ultra、三星 Galaxy S10 等)。到目前为止我尝试过的:

  1. 将其添加到我的活动的 onCreate 视图中

     this.getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
    
  2. 在布局 xml 的根组件上添加 keepScreenOn

     android:keepScreenOn="true"
    
  3. 使用电源管理器防止屏幕在我的onCreate中关闭

     PowerManager powerManager = (PowerManager) this.getSystemService(Context.POWER_SERVICE);
     this.wakeLock = powerManager.newWakeLock(PowerManager.FULL_WAKE_LOCK, "test.");
     this.wakeLock.acquire();
    

不管我做什么,三星屏幕锁定会在一段时间后出现,如下图所示

enter image description here

WAKE_LOCK这样的权限当然会添加到清单中。这看起来很简单,但我不知道如何避免这种情况。我经常收到在三星设备上使用我的应用程序的用户的投诉,例如,当他们使用游戏手柄并且不主动触摸屏幕时,屏幕会不断关闭。在三星设备上如何避免这种情况?它似乎在所有其他设备上运行良好。我之前也检查过很多堆栈溢出条目,但没有找到任何具体内容,但也许我错过了一些东西。有人能指出我正确的方向吗?

android samsung-mobile lockscreen wakelock
3个回答
1
投票

我偶然发现了这个: https://dontkillmyapp.com/samsung

2021 年更新:尽管 Android 团队承诺强制 OEM 厂商对非标准应用程序查杀保持透明,但在 Android 11 中,三星引入了新的严格(默认开启)限制。应用程序无法再在前台服务中保持唤醒锁定。这破坏了许多用例,例如健康应用程序现在无法为其用户收集传感器数据。请参阅此处的详细信息并阅读下面的解决方法。


0
投票

您可以使用下面的代码来做到这一点:

PowerManager powerManager = (PowerManager) getSystemService(POWER_SERVICE);
WakeLock wakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK,
        "MyApp::MyWakelockTag");
wakeLock.acquire();

更多信息:Android 文档


0
投票

我找到了一种让我的 Galaxy a23 保持屏幕常亮的方法

  • 安装唤醒高级版
  • 检查wakey的可访问性
  • 检查其中的唤醒应用程序锁
© www.soinside.com 2019 - 2024. All rights reserved.