tactil samsung pro para pantalla interacción interaccion encender desactivar contraste celular boton bloqueada aplicacion apagar alto android wakelock

samsung - Android: apagar la pantalla sin activar la pantalla de suspensión/bloqueo-encender con la pantalla táctil



interacción tactil bloqueada samsung j7 pro (5)

He estado tratando de encontrar una manera de apagar la pantalla y despertarme cuando el usuario toca la pantalla táctil.
El dispositivo se encuentra en un entorno integrado donde el dispositivo es una tableta y el usuario no tiene acceso a nada, excepto a la pantalla táctil (sin botones).

Está conectada a la alimentación para que la batería no sea un problema, pero cuando detecto que no hay actividad, quiero apagar la pantalla para que no los esté mirando cara a cara todo el día y no reduzca la vida útil de la luz de fondo de la pantalla LCD. .

Mantengo un wakelock permanentemente y decido cuándo dormir yo mismo.

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 despertarla. Necesitas presionar el botón de encendido. En ese punto aparece el mensaje "deslizar 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é cambiar la pantalla a un brillo de 0,1, que funciona en algunos dispositivos, pero el dispositivo en el que necesito que funcione, solo "atenúa" la pantalla.

También probé 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.


@NebulaSleuth

Entonces, ha pasado un tiempo, ¿algún progreso?

Si todavía estás en él: ¿por qué no atornillar botones y pantallas táctiles, tal vez vincular el despertar al giroscopio?

Esperaba usar algo como esto al menos para teléfonos con botones y descargar la activación a las teclas de control de volumen o al giroscopio ...


Finalmente lo descubrí. 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 xml de diseño de pantalla completa (parámetros de diseño establecidos en fill_parent )

  • Establezca su vista como no pulsable, no enfocable, no pulsable durante mucho tiempo, etc. para que el toque pase a su aplicación y la aplicación pueda detectarlo.

    view.setFocusable(false);
    view.setClickable(false);
    view.setKeepScreenOn(false);
    view.setLongClickable(false);
    view.setFocusableInTouchMode(false);

  • Cree un parámetro de diseño de tipo android.view.WindowManager.LayoutParams . LayoutParams layoutParams = new LayoutParams();

  • Ajuste el 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 establecer qué porcentaje de brillo 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 la vista al 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"/>

He probado esto y funciona. Déjame saber si te quedas atascado.


No sé si eso te ayuda, pero simplemente puedes usar un bloqueo de despertador para que tu pantalla siga y muestre una vista de imagen que muestre una imagen en negro


Puede hacer una cosa que es Adquirir Wakelock parcial 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);


Si tiene servicios, utilice el bloqueo de activación, pero si lo hace desde el lado de la Actividad, es mejor utilizar indicadores para adquirir el indicador.

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 como e imponer otras banderas para atenuar la pantalla o difuminarla. getWindow (). clearFlags (WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);

Espero que esto resuelva su problema. Opcionalmente, explore otras banderas desde http://developer.android.com/reference/android/view/Window.html

Hay un Fyi más ... Llamando a la API oculta en Android para apagar la pantalla