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

Ada*_*gyi 20 android android-screen android-screen-support

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

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

bar*_*rry 35

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

getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
Run Code Online (Sandbox Code Playgroud)

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


Ste*_*isi 20

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

<uses-permission android:name="android.permission.WAKE_LOCK" />
Run Code Online (Sandbox Code Playgroud)

并在您的代码活动中:

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

只需记住在执行此操作暂停或销毁应用程序时释放此锁定:

wakeLock.release();
Run Code Online (Sandbox Code Playgroud)

通常情况下,它的建议致电获取的内部方法的onResume()你的活动和释放的方法的onPause() .这样我们保证我们的应用程序在暂停或恢复时仍然表现良好.

  • 自API 17以来,FULL_WAKE_LOCK已被弃用,FLAG_KEEP_SCREEN_ON现在是要走的路:) (3认同)

SAN*_*NAT 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">
Run Code Online (Sandbox Code Playgroud)

以编程方式:

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

getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)
Run Code Online (Sandbox Code Playgroud)


Nik*_*hil 5

KeyguardManager keyguardManager = (KeyguardManager)getSystemService(Activity.KEYGUARD_SERVICE);
KeyguardLock lock = keyguardManager.newKeyguardLock(KEYGUARD_SERVICE);
lock.disableKeyguard();
Run Code Online (Sandbox Code Playgroud)

在 Android 清单中:

<uses-permission android:name="android.permission.DISABLE_KEYGUARD"/>
Run Code Online (Sandbox Code Playgroud)

或者

点击此链接