android android-screen android-screen-support

¿Cómo evitar el bloqueo automático de pantalla en Android por código?



android-screen android-screen-support (7)

La siguiente línea permite que su teléfono esté ENCENDIDO cuando la aplicación está en primer plano

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

Las siguientes instrucciones nos permiten desactivar la pantalla de bloqueo cuando se presiona el botón de bloqueo. La clase KeyguardLock quedó en desuso en el nivel API 13

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

Y en tu manifiesto:

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

En mi aplicación hay un largo proceso de carga, y si los dispositivos se bloquean en la pantalla, mi proceso se detiene por algún motivo.

¿Cómo puedo evitar que el dispositivo se bloquee automáticamente?


Otra forma de mantener el bloqueo de pantalla encendido sin tener que solicitar el permiso en el formulario es:

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

¿Estás haciendo tu largo proceso de carga en el hilo de la interfaz de usuario? Algo no parece correcto: si el proceso es tan largo que el tiempo de espera de bloqueo de pantalla y su proceso finaliza, tal vez deba ir en un servicio en segundo plano.


Tienes que declarar este uso-permiso en AndroidManifest:

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

Y en tu código de Actividad:

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

Solo recuerda liberar este bloqueo cuando tu aplicación esté en pausa o destruida haciendo esto:

wakeLock.release();

Por lo general, se sugiere llamar al método de adquisición dentro de onResume () de su actividad y al método de liberación en onPause () . De esta manera, garantizamos que nuestra aplicación aún funciona bien en caso de ser pausada o reanudada.


Una opción interesante que no fue mencionada todavía es la

View#setKeepScreenOn(boolean onOff)

método. Esto se puede usar de forma dinámica en cualquier momento durante el tiempo de ejecución de la aplicación, por ejemplo, para configurar el modo de pantalla dependiendo del estado de la aplicación


Forma XML:

Simplemente use el atributo keepScreenOn en su diseño principal:

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

programáticamente

Puedes configurarlo programáticamente agregando una bandera:

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


Ir con el código de la clave de seguridad funciona perfectamente,

Simplemente pegue el código en el método onCreate en su archivo de actividad principal Y permiso en el archivo de manifiesto de Android


KeyguardManager keyguardManager = (KeyguardManager)getSystemService(Activity.KEYGUARD_SERVICE); KeyguardLock lock = keyguardManager.newKeyguardLock(KEYGUARD_SERVICE); lock.disableKeyguard();

en androidmanifest:

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

O

Sigue este enlace