Android: apaga la pantalla sin activar la pantalla de suspensión / bloqueo – Activar con pantalla táctil
He estado tratando de encontrar una forma de apagar la pantalla, y despertar desde el usuario toque la pantalla táctil.
El dispositivo se encuentra en un entorno incrustado en el que el dispositivo es una tableta y el usuario no tiene acceso a nada excepto a la pantalla táctil (sin botones).
Está conectado a la energía así que la batería no será un problema, pero cuando no detecto ninguna actividad que quiero apagar la pantalla así que no los está mirando en la cara todo el día y no reduce la vida la luz de fondo del LCD .
- Corregir el patrón para adquirir un WakeLock en un BroadcastReceiver y liberarlo en un servicio
- ¿Cómo despertar android y mostrar la actividad?
- ¿Cómo las notificaciones necesitan WAKE_LOCK en android?
- Pantalla tenue mientras el usuario está inactivo
- StandBy como actividad
Mantengo un wakelock permanentemente y decido cuándo dormirme.
El problema es que cuando apago la pantalla usando:
WindowManager.LayoutParams params = getWindow().getAttributes(); params.screenBrightness = 0; getWindow().setAttributes(params);
La actividad se detiene y se detiene. Y la unidad no responde a un toque para despertarlo. Debe presionar el botón de encendido. En ese punto se muestra la "diapositiva para desbloquear".
Quiero apagar la pantalla, y luego seguir corriendo para poder detectar un evento de pantalla táctil y volver a encender la pantalla.
También intenté dar vuelta a la exhibición a un brillo de 0.1, que trabaja en algunos dispositivos, pero el dispositivo que necesito para trabajar encendido, "dims" solamente la exhibición.
También he intentado esto:
// First Remove my FULL wakelock //then aquire a partial wake lock (which should turn off the display) PowerManager.WakeLock wl = manager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "Your Tag"); wl.acquire();
Sin embargo este método no apaga la pantalla.
- ¿Qué eventos pueden despertar un dispositivo Android durmiente?
- BroadcastReceiver Vs WakefulBroadcastReceiver
- ¿Necesito un bloqueo de despertador en mi transmisor-receptor si no estoy iniciando un servicio o una actividad?
- Android: Mantenga la cámara LED encendida después de que la pantalla se apague
- ¿Cómo desactiva Android Wear cuando está en modo de suspensión?
- Wake + Wifi bloqueo sin efecto
- ¿Cómo usar Wake Lock para android mediaplayer?
- Si un wakelock es adquirido y mi aplicación se bloquea, ¿qué debo hacer?
Finalmente lo deduje. Espero eso ayude. 🙂
-
Obtener una instancia de WindowManager.
WindowManager windowManager = (WindowManager) Class.forName("android.view.WindowManagerImpl").getMethod("getDefault", new Class[0]).invoke(null, new Object[0]);
-
Crear un diseño de pantalla completa xml (parámetros de diseño establecidos en
fill_parent
) -
Configure su vista como no se puede hacer clic, no se puede enfocar, no se puede hacer clic largo, etc. para que el toque se pase a través de su aplicación y la aplicación pueda detectarla.
view.setFocusable(false);
view.setClickable(false);
view.setKeepScreenOn(false);
view.setLongClickable(false);
view.setFocusableInTouchMode(false); -
Cree un parámetro de diseño del tipo
android.view.WindowManager.LayoutParams
.LayoutParams layoutParams = new LayoutParams();
-
Establecer parámetro de diseño como altura, ancho, etc
layoutParams.height = LayoutParams.FILL_PARENT; layoutParams.width = LayoutParams.FILL_PARENT; layoutParams.flags = 280; // You can try LayoutParams.FLAG_FULLSCREEN too layoutParams.format = PixelFormat.TRANSLUCENT; // You can try different formats layoutParams.windowAnimations = android.R.style.Animation_Toast; // You can use only animations that the system to can access layoutParams.type = LayoutParams.TYPE_SYSTEM_OVERLAY; layoutParams.gravity = Gravity.BOTTOM; layoutParams.x = 0; layoutParams.y = 0; layoutParams.verticalWeight = 1.0F; layoutParams.horizontalWeight = 1.0F; layoutParams.verticalMargin = 0.0F; layoutParams.horizontalMargin = 0.0F;
-
Paso clave: Puede definir el porcentaje de brillo que necesita.
view.setBackgroundDrawable(getBackgroundDrawable(i));
private Drawable getBackgroundDrawable(int i) { int j = 255 - (int) Math.round(255D * Math.exp(4D * ((double) i / 100D) - 4D)); return new ColorDrawable(Color.argb(j, 0, 0, 0));}
-
Finalmente agregue vista a windowManager que creó anteriormente.
windowManager.addView(view, layoutParams);
Nota: Necesita el permiso SYSTEM_ALERT_WINDOW
para colocar una superposición en la pantalla.
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
Han probado esto y funciona. Avísame si te quedas atascado.
Si usted tiene servicios usar el bloqueo de la estela pero si usted lo está haciendo del lado de la actividad su mejor idea utilizar las banderas para adquirir la bandera.
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); // For keeping screen on // You can blur screen or dim screen using following flags // FLAG_BLUR_BEHIND - Blur screen // FLAG_DIM_BEHIND - Dim Behind
Puede borrar estas banderas e imponer otras banderas a la pantalla tenue o desenfoque. GetWindow (). ClearFlags (WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
Espero que esto solucione su problema. Opcionalmente Explore otras banderas desde http://developer.android.com/reference/android/view/Window.html
Hay una más Fyi .. Calling API ocultos en Android para desactivar la pantalla
No sé si eso le ayuda pero usted podría utilizar simplemente un bloqueo de la estela de modo que su scren continúe y exhiba una visión de la imagen que exhiba una imagen negra
Usted puede hacer una cosa que es Adquirir Parcial Wakelock y apagar la pantalla usando:
PowerManager.WakeLock wl = manager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "Your Tag"); wl.acquire(); WindowManager.LayoutParams params = getWindow().getAttributes(); params.screenBrightness = 0; getWindow().setAttributes(params);
@NebulaSleuth
Así que, ha sido un tiempo, cualquier progreso?
Si todavía estás en ello: ¿por qué no atornillar botones y pantallas táctiles, tal vez conectar wake-up a giroscopio?
Esperaba utilizar algo como esto al menos para los teléfonos con botones y descargar el despertador a las teclas de control de volumen o el giroscopio …
- Gradle build-info.xml no se encuentra para la aplicación de módulo en Android Studio
- Cómo hacer que RelativeSizeSpan se alinee a la parte superior