微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决Android 在三星设备上保持屏幕开启

我有一个流媒体应用程序,我想避免在流媒体播放时屏幕关闭。它适用于我的大多数设备,但不适用于某些三星设备(三星 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 之类的权限当然会添加到 Manifest 中。看起来很简单,但我不知道如何避免这种情况。我经常收到在三星设备上使用我的应用程序的用户的抱怨,例如,当他们使用游戏手柄而不主动触摸屏幕时,屏幕会一直关闭。如何在三星设备上避免这种情况?它似乎在所有其他设备上都能正常工作。我之前也检查了很多堆栈溢出条目,但没有找到任何具体的东西,但也许我错过了一些东西。有人能指出我正确的方向吗?

解决方法

你可以用下面的代码做到这一点:

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

更多信息:Android Documentation

,

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。