【问题标题】:How To Prevent/Disable Screen Timeout Programmatically? [duplicate]如何以编程方式防止/禁用屏幕超时? [复制]
【发布时间】:2021-09-05 12:51:51
【问题描述】:

我正在尝试构建一个可以防止手机屏幕熄灭的应用程序(即使应用程序被最小化到后台)

我知道这个功能肯定是可行的,因为 Play 商店中有很多应用程序可以做到这一点。

https://play.google.com/store/apps/details?id=com.eonsoft.ScreenON

此特定应用可防止手机无限期超时。他们要求绘制其他应用程序权限。但我无法弄清楚它如何帮助防止手机出现屏幕超时。你们中的任何一位专家都可以指导我如何实现这一目标吗?

我已经尝试过的事情:

getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);

但上面的代码只有在我的应用打开时才能防止手机屏幕超时。即使我的最小化,我也希望它能够工作。

我已经尝试过这里给出的解决方案: Android disable screen timeout while app is running

但上述解决方案仅在我的应用程序正在运行时才有效。让我用一个用例场景来解释。我希望他们在使用他们选择的 PDF 查看器阅读文档时屏幕不会超时(在这种情况下,我的应用程序可能因为他们已最小化而未处于活动状态)

【问题讨论】:

  • “但是上面的代码只有在我的应用程序打开时才能防止手机屏幕超时”——不,只要Window(来自getWindow())是可见的。 “他们要求在其他应用程序上绘制权限”- 最有可能的是,他们从 Service 显示自己的 Window。请注意,此权限并非在所有 Android 设备上都可用,而且似乎在未来几年内可能会消失。

标签: java android kotlin


【解决方案1】:

您可以在后台运行服务并像这样获取锁:

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

并返回 onStartCommand START_STICKY。要释放唤醒锁,请调用wakelock.release()。不要忘记将权限放在清单文件中:

<uses-permission android:name="android.permission.WAKE_LOCK" />

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-05-31
    • 1970-01-01
    • 2011-11-29
    • 1970-01-01
    • 1970-01-01
    • 2010-11-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多