如何通过代码防止android上的自动屏幕锁定?

时间:2012-07-05 12:27:54

标签: android android-screen android-screen-support

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

如何防止设备自动屏幕锁定?

6 个答案:

答案 0 :(得分:29)

另一种保持屏幕锁定而不必请求最明确的权限的方法是:

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

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

答案 1 :(得分:19)

你必须在AndroidManifest上声明这个uses-permission:

<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()内调用获取方法,并在 onPause中调用发布方法()即可。这样我们保证我们的应用程序在暂停或恢复的情况下仍然表现良好。

答案 2 :(得分: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"/>

关注this link

答案 3 :(得分:1)

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

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

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

/*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"/>

答案 4 :(得分:1)

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)

答案 5 :(得分:0)

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

View#setKeepScreenOn(boolean onOff)

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