【问题标题】:How to prevent display from ever turning off?如何防止显示器永远关闭?
【发布时间】:2023-03-14 10:35:01
【问题描述】:

我想使用SCREEN_OFF_TIMEOUT来防止显示器在不活动后关闭,像这样:

Settings.System.putInt(getContentResolver(), Settings.System.SCREEN_OFF_TIMEOUT, time);

Android 文档是这样说的:

此值受设置的最大超时限制 * {@link android.app.admin.DevicePolicyManager#setMaximumTimeToLock(ComponentName, long)}.

我不知道这意味着什么。这是否意味着每个设备都有自己的最大值SCREEN_OFF_TIMEOUT?如果是,您如何获得此值?如果不是,那么最大值是多少?

【问题讨论】:

  • 如果您的目标是在应用处于前台时保持屏幕打开,请在布局中的某些小部件上使用 android:keepScreenOn="true"。 “这是否意味着每个设备都有自己的最大 SCREEN_OFF_TIMEOUT?” -- 是的,如果设备管理应用设置了限制。 “如果是,你如何获得这个值”——致电getMaximumTimeToLock() on DevicePolicyManager
  • 我在后台运行的服务中使用它,因此 android:keepScreenOn="true" 不适用。 getMaximumTimeToLock()这个方法是怎么用的?我应该创建DevicePolicyManager 的实例吗?
  • “我在后台运行的服务中使用它,所以 android:keepScreenOn="true" 不适用”——如果你在后台运行,用户为什么要你要一直开着屏幕吗? “我应该创建一个DevicePolicyManager 的实例吗?” -- 不,那是系统服务。在Context 上调用getSystemService(DEVICE_POLICY_SERVICE) 以获取DevicePolicyManager 的实例。
  • 引用文档,“ComponentName:要检查的管理组件的名称,或 null 以聚合所有管理员。此值可能为 null。”所以,试试null
  • "0...这是否意味着显示器永远不会关闭?" ——可能,但我对此表示怀疑。我希望在系统确定“不活动”时立即关闭显示器。另请注意,根据源代码,我不确定您是否可以在 Android 9 及更高版本上更改此值。

标签: java android


【解决方案1】:

android:keepScreenOn="true" 添加到此活动的布局 XML 资源中的某个小部件。只要该小部件在屏幕上可见,屏幕就不会自动关闭。

正如其他答案所建议的那样,WakeLock 在技术上是可行的。但是你必须手动释放 WakeLock(如果你把它搞砸了,屏幕会停留很长时间)。而且,由于您可能会搞砸,您需要WAKE_LOCK 权限。使用keepScreenOn 可以避免所有这些。

【讨论】:

    【解决方案2】:

    请参考这个Solution-1希望这对你有用。这个解决方案提到了使用FLAG_KEEP_SCREEN_ON 的最佳方式,而这个Solution-2 提到了使用WakeLock 的一些问题。

    【讨论】:

      猜你喜欢
      • 2012-09-18
      • 1970-01-01
      • 2019-10-26
      • 1970-01-01
      • 2018-05-05
      • 2011-03-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多