¿WakeLocks evita que la pantalla se bloquee (bloqueo de contraseña/PIN)? Si es así, ¿puedo solucionar eso?

Tengo un servicio que mantiene la pantalla encendida en un nivel tenue en ciertos momentos, y utiliza un WakeLock 'oscuro' para lograr esto. Funciona bien... excepto que la pantalla nunca se bloquea. Es decir, mientras se mantiene el WL tenue, la pantalla de bloqueo nunca aparece y requiere que el usuario deslice y se autentique.

Tenga en cuenta que estoy desarrollando en una plataforma que puede tener cambios de proveedor en el código del marco de Java de Android de bajo nivel, por lo que es posible que este no sea el comportamiento estándar de Android. Pero también, tengo acceso al código del marco y puedo cambiarlo, si es necesario. Simplemente no puedo entender dónde se aplica esta política en el código.

preguntado el 03 de mayo de 12 a las 20:05

"¿WakeLocks evita que la pantalla se bloquee (bloqueo de contraseña/PIN)?" -- el que está usando sí. No tengo idea de por qué un Service querría mantener la pantalla encendida. "Si es así, ¿puedo solucionar eso?" -- Utilizar una PARTIAL_WAKE_LOCK para el trabajo en segundo plano puro (por ejemplo, la comprobación de nuevos mensajes de correo electrónico). "Tengo acceso al código del marco y puedo cambiarlo, si es necesario. Simplemente no puedo entender dónde se aplica esta política en el código". -- me gana, razón por la cual esto es solo un comentario. Dicho esto, terminarías cambiando eso por todas las aplicaciones en el dispositivo, lo que podría no ser una buena idea. -

Cuando el dispositivo tiene alimentación externa, queremos mantener visible el contenido de la pantalla, pero aún queremos que se bloquee. Tendría que poder hacer esto algo configurable, como usted dice, básicamente, necesito un tipo especial de WakeLock que no existe actualmente: un WakeLock que mantiene la pantalla encendida, pero permite que la pantalla se bloquee. -

1 Respuestas

Cuando el dispositivo tiene alimentación externa, queremos mantener visible el contenido de la pantalla, pero aún queremos que se bloquee.

La única forma que se me ocurre de hacer eso es que usted mantenga su propio temporizador para saber cuándo activar el bloqueo y luego usar DevicePolicyManager y lockNow() para bloquear el dispositivo en ese punto. Esto requiere permisos adicionales y trabajo de configuración adicional (habilitando su aplicación como administrador de dispositivos).

contestado el 04 de mayo de 12 a las 15:05

Solo hay un problema con eso (también pensé en esto) ... no hay una API pública (que yo sepa) para la 'actividad del usuario'. Es decir, mi servicio no tiene forma de saber cuándo el usuario hizo algo por última vez que debería reiniciar el temporizador de tiempo de espera 'inactivo'. ¿Conoces alguna forma de conseguir esto? - cbp2

@cbp2: No, lo siento, eso no está expuesto AFAIK. Puede determinar si el usuario hace algo con sus actividades, pero no en general en el sistema. Sin embargo, obviamente está en el firmware en alguna parte, por lo que si está creando su propio firmware, puede descubrir alguna forma de exponerlo sin jugar demasiado con la API (por ejemplo, enviar algunos personalizados). ACTION_IDLE transmisión). - CommonsWare

Sí, yo también pensé en eso. Si estoy cambiando el código del marco, podría despellejar a este gato de diferentes maneras. Solo estoy tratando de encontrar la forma menos intrusiva, ya que Google o el proveedor pueden cambiar este código en cualquier momento ... una pesadilla de mantenimiento. - cbp2

¿Alguien puede decirme cuál es la API de Android para bloquear la pantalla? El comando 'dormir ahora' también apaga la pantalla, ignorando cualquier WakeLocks, no quiero eso. SÓLO quiero bloquear la pantalla, pero dejar la pantalla encendida. - cbp2

@cbp2: "¿Puede alguien decirme cuál es la API de Android para bloquear la pantalla?" -- um, bueno, hay lockNow() in DevicePolicyManager, pero lo señalé en mi respuesta. - CommonsWare

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.