Antes de marcar esta publicación como "duplicada", estoy escribiendo esta publicación porque ninguna otra publicación contiene la solución al problema.
Estoy tratando de apagar el dispositivo, luego, después de unos minutos o de un cambio de sensor, vuelva a encenderlo.
Desactivar las pruebas de pantalla
Puedo apagar la pantalla usando:
params.flags |= LayoutParams.FLAG_KEEP_SCREEN_ON;
params.screenBrightness = 0;
getWindow().setAttributes(params);
No he podido apagar la pantalla con el método wl.release ().
Activar prueba de pantalla
Mi primera suposición, como sigue, no funciona. No pasa nada, la pantalla permanece apagada.
params.flags |= LayoutParams.FLAG_KEEP_SCREEN_ON;
params.screenBrightness = -1f;
getWindow().setAttributes(params);
Luego también intenté usar wakelocks, sin éxito.
PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK, "tag");
wl.acquire();
Finalmente probé lo siguiente, sin resultado.
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);
Con todo, no obtengo ningún tipo de error en la consola para ninguno de estos métodos. Mi texto de prueba "La pantalla debería estar encendida" aparece en la pantalla cuando enciendo el dispositivo con el botón de encendido. Esto muestra que el código debería haberse ejecutado. Por favor, solo responda si ha probado el código, parece que muchas de las funciones como params.screenBrightness = -1
, no funcionan como deberían según el sdk.
Respuestas:
Asumiré que solo desea que esto esté en vigor mientras su aplicación esté en primer plano.
Este código:
No apaga la pantalla en el sentido tradicional. Hace que la pantalla sea lo más tenue posible. En la plataforma estándar hay un límite en cuanto a lo tenue que puede ser; si su dispositivo realmente permite que la pantalla se apague por completo, entonces es una peculiaridad de la implementación de ese dispositivo y no un comportamiento con el que pueda contar en todos los dispositivos.
De hecho, usar esto junto con FLAG_KEEP_SCREEN_ON significa que nunca permitirá que la pantalla se apague (y, por lo tanto, que el dispositivo entre en modo de bajo consumo) incluso si el dispositivo en particular le permite configurar el brillo de la pantalla al máximo. Tenga esto muy en cuenta. Utilizará mucha más energía de la que utilizaría si la pantalla estuviera realmente apagada.
Ahora, para volver la pantalla al brillo normal, solo debe configurar el valor de brillo:
No puedo explicar por qué esto no reemplazaría el valor 0 que había establecido anteriormente. Como prueba, puede intentar poner un brillo completo forzado allí para forzar ese brillo específico:
Esto definitivamente funciona. Por ejemplo, las aplicaciones de Google Books usan esto para permitirle configurar el brillo de la pantalla para que se atenúe mientras usa un libro y luego volver al brillo normal al apagarlo.
Para ayudar a depurar, puede usar "adb shell dumpsys window" para ver el estado actual de su ventana. En los datos de su ventana, le indicará los LayoutParams actuales que se han configurado para ella. Asegúrese de que el valor que cree que realmente está ahí.
Y nuevamente, FLAG_KEEP_SCREEN_ON es un concepto separado; él y el brillo no tienen un impacto directo entre sí. (Y no habría razón para volver a establecer la bandera al deshacer el brillo, si ya la había configurado al poner el brillo a 0. La bandera permanecerá configurada hasta que la cambie).
fuente
Escribí este método para encender la pantalla después del bloqueo de pantalla. Funciona perfectamente para mí. Intentalo-
Y llame a este método desde
onResume()
.fuente
Sugeriría este:
La bandera ACQUIRE_CAUSES_WAKEUP se explica así:
Además, asegúrese de tener el siguiente permiso en el archivo AndroidManifewst.xml:
fuente
Hola, espero que esto te ayude:
fuente
PowerManager.PROXIMITY_SCREEN_OFF_WAKE_LOCK
que solo apaga la pantalla cuando el sensor de proximidad está en el estado "cerca".PROXIMITY_SCREEN_OFF_WAKE_LOCK
bloqueo de espera, la pantalla vuelve a encenderse. ¿Cómo puedo prevenir esto?// Archivo de manifiesto de usuario
fuente
¿Está seguro de que solicitó el permiso adecuado en su archivo de manifiesto?
Puede usar la clase AlarmManager 1 para disparar una intención que inicia su actividad y adquiere el bloqueo de activación. Esto encenderá la pantalla y la mantendrá encendida. Liberar el wakelock permitirá que el dispositivo se duerma por sí solo.
También puede echar un vistazo al uso de PowerManager para configurar el dispositivo en suspensión: http://developer.android.com/reference/android/os/PowerManager.html#goToSleep(largo)
fuente
La mejor manera de hacerlo (usando dispositivos rooteados):
Ahora tenemos estas dos funciones:
Y esto:
Perdón por mi mal ingles.
fuente
Aquí hay un ejemplo exitoso de una implementación de lo mismo, en un dispositivo que admitía valores de brillo de pantalla más bajos (probé en una tableta Allwinner Chinese de 7 "con API15).
Si alguien más prueba esto, por favor comente a continuación si funcionó / no funcionó y el dispositivo, la API de Android.
fuente
Para mantener la pantalla encendida:
Volver al modo predeterminado de pantalla: simplemente borre la bandera FLAG_KEEP_SCREEN_ON
fuente
Esto se trabajó en Marshmallow
fuente
Con respecto a la documentación de Android, se puede lograr usando la siguiente línea de código:
He agregado esto en mi
onCreate
método y funciona bien.En el enlace encontrará diferentes formas de lograr esto y también una explicación general.
Enlace a la documentación: https://developer.android.com/training/scheduling/wakelock.html
fuente
Si su aplicación es una aplicación del sistema, puede usar PowerManager.goToSleep () para apagar la pantalla, necesita un permiso especial
antes de usar goToSleep (), necesita usar la reflexión como:
Ahora, puede usar goToSleep () para apagar la pantalla.
fuente
Simplemente agregue
o llamar
en vista de los padres.
fuente
No tendría la esperanza de "despertar la pantalla" en la actividad. Si la pantalla está apagada, la actividad probablemente esté en un estado de pausa y no debería estar ejecutando ningún código.
Al despertar, existe el problema de la pantalla de bloqueo. No sé cómo una aplicación puede omitir automáticamente la pantalla de bloqueo.
Debe considerar ejecutar sus tareas en segundo plano en un servicio y luego usar el administrador de notificaciones para enviar una notificación cuando se detecte algo. La notificación debe proporcionar algún tipo de alerta del dispositivo (activación de la pantalla, icono de notificación, led de notificación, etc.). Al hacer clic en la notificación, puede iniciar la intención de iniciar su actividad.
También puede intentar iniciar la actividad directamente desde el servicio, pero realmente no sé si eso encenderá la pantalla o evitará la pantalla de bloqueo.
fuente
Según la API de Android 28 y superior, debe hacer lo siguiente para encender la pantalla
fuente
He intentado todas las soluciones anteriores, pero ninguna funcionó para mí. así que busqué en Google y encontré las siguientes soluciones. Lo intenté y funcionó.
https://www.tutorialspoint.com/how-to-turn-android-device-screen-on-and-off-programically
Si hay alguna sugerencia, por favor dé
fuente