26

在我的应用程序中有一个很长的加载过程,如果设备锁定屏幕,我的过程会因某种原因停止。

如何防止设备自动锁屏?

4

7 回答 7

42

无需在清单中请求许可即可保持屏幕锁定的另一种方法是:

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

您是否在 UI 线程中进行长时间的加载过程?有些事情似乎不对 - 如果进程太长以至于屏幕锁定超时并且您的进程结束,那么它可能需要进入后台服务。

于 2012-07-05T13:36:12.973 回答
22

您必须在 AndroidManifest 上声明此使用权限:

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

在您的代码活动中:

PowerManager powerManager = (PowerManager)context.getSystemService(Context.POWER_SERVICE);
WakeLock wakeLock = powerManager.newWakeLock(PowerManager.FULL_WAKE_LOCK, "My Lock");
wakeLock.acquire();

请记住,当您的应用程序暂停或销毁时,通过执行以下操作释放此锁:

wakeLock.release();

通常,建议在活动的onResume()中调用acquire方法,在onPause()中调用release方法。这样我们保证我们的应用程序在被暂停或恢复的情况下仍然表现良好。

于 2012-07-05T12:30:45.620 回答
6

XML方式:

只需keepScreenOn在父布局中使用属性:

<androidx.constraintlayout.widget.ConstraintLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:keepScreenOn="true">

以编程方式:

您可以通过添加标志以编程方式设置它:

getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)
于 2018-11-27T09:05:56.387 回答
4
KeyguardManager keyguardManager = (KeyguardManager)getSystemService(Activity.KEYGUARD_SERVICE);
KeyguardLock lock = keyguardManager.newKeyguardLock(KEYGUARD_SERVICE);
lock.disableKeyguard();

在 androidmanifest 中:

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

或者

按照这个链接

于 2012-07-05T12:31:11.587 回答
3

以下行允许您的手机在应用程序处于前台时打开

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

以下说明允许我们在按下锁定按钮时禁用锁定屏幕。API 级别 13 中不推荐使用 KeyguardLock 类

/*onCreate*/
KeyguardManager keyguardManager = (KeyguardManager)getSystemService(Activity.KEYGUARD_SERVICE);
KeyguardLock lock = keyguardManager.newKeyguardLock(KEYGUARD_SERVICE); // Deprecated :/
lock.disableKeyguard();

在你的清单中:

<uses-permission android:name="android.permission.DISABLE_KEYGUARD"/>
于 2015-08-28T10:02:42.597 回答
2

尚未提及的一个有趣的选项是

View#setKeepScreenOn(boolean onOff)

方法。这实际上可以在应用程序运行期间的任何时候动态使用,例如根据应用程序状态设置屏幕模式

于 2013-10-29T17:39:53.400 回答
1

使用密钥保护代码,它可以完美运行,

只需将代码粘贴到您的 mainactivity 文件中的 onCreate 方法中并在 android 清单文件中粘贴权限

于 2015-07-16T12:17:27.767 回答