2009-04-09 12 views
9

tengo que activar el sistema de bloqueo de teclado de Android (el que se obtiene cuando se pulsa el poder fuera /cuelgue botón). Veo aquí:Android - Activación del sistema de bloqueo de teclas (también conocido como bloqueo de pantalla)

img

ya he echado un vistazo a los documentos, pero todo lo que encontré fue PowerManager y KeyguardManager. Ambos parecen no ser la solución :-(.

Entonces, ¿todos saben cómo lograrlo desde una aplicación de Android? (Si se requieren permisos especiales, eso no es un problema, pero cambiar la configuración del dispositivo no es una solución. ..)

EDITAR: sabe alguien que este definitivamente no es posible en absoluto por cierto craigs solución con teclas que envían ya no funciona (ver comentarios)

+1

También puede probar saltando en el IRC (#android freenode) y hablar con el desarrollador principal –

Respuesta

2

He estado buscando una respuesta a la misma pregunta por un tiempo. Aparentemente, después de 2.0 en adelante, se eliminaron los privilegios del administrador de dispositivos para el nivel de la aplicación. Pero con Froyo - 2.2 se revela el administrador de políticas del dispositivo que nos otorga a los desarrolladores una multitud de controles de nivel administrativo.

http://developer.android.com/guide/topics/admin/device-admin.html

0

Hay un muy buen ejemplo aquí o?.. :

http://www.anddev.org/throwing-simulating_keystrokes_programatically-t717.html

Parece que puede provocar programáticamente que se envíe cualquier combinación de teclas al sistema. Suena como el código clave que está buscando es la KEYCODE_ENDCALL, pero si eso no funciona, hay un montón de otros códigos para tratar aquí:

http://developer.android.com/reference/android/view/KeyEvent.html

no sé si hay alguna llamada a la API hacer que ocurra el bloqueo, pero esto parece una solución bastante robusta hasta que encuentre una mejor solución.

+2

a sí mismo ya no está disponible, se retiró Este método por motivos de seguridad. – sooniln

+0

Ah bummer, ¿conoce alguna otra solución? –

+0

Hmm, Android 1.0/los próximos 1.5 son la plataforma de destino, así que eso no funcionará :-( –

0

Buscando a través de la fuente de Android encontró WindowManagerService que parece tener un método público (startAppFreezingScreenLocked) para activar esto. Este puede ser un buen lugar para comenzar a buscar su respuesta, ya que lamentablemente no parece que pueda obtener directamente un objeto WindowManagerService.

1

Lo que está buscando es el reenableKeyguard() método en KeyguardManager.KeyguardLock mi amigo!

+0

¿Lo intentó? ¿Realmente apareció la pantalla de bloqueo como puede ver arriba? Intenté y bloqueó el teclado pero NO fue el bloqueo de teclas del sistema ... –

+0

Ah, podría haber malinterpretado su pregunta aquí. ¿Se trata de mostrar la PANTALLA o activar el bloqueo de la tecla del sistema? – sthg

+0

sthg, ambos :-). Solo quiero activar el bloqueo de teclas del sistema normal. La pantalla en sí es parte de ese bloqueo de teclas. Si el usuario activó un código (o un patrón de desbloqueo), se le debe preguntar sobre ese código/patrón. Simplemente bloquear el teclado no es suficiente :-( –

1

Parece que la función de bloqueo de la pantalla se realiza usando el método:

public void goToSleep(long time) 

método en PowerManager.java. Es posible obtener una referencia a él de esta manera:

PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE); 

Sin embargo, esto requiere el permiso

android.permission.DEVICE_POWER 

que es un permiso de nivel 2 a la disposición de sistema.

Parece que esto no es factible. Esto es solo para la versión 1.1, no sé para 1.5.

+0

hmm, eso es malo. De hecho, creo que eso ni siquiera sería suficiente, porque realmente necesito el bloqueo de teclas del sistema como se puede ver en la captura de pantalla anterior. Nada sobre esa pantalla se menciona en los documentos de PowerManager ... Solo dice que el dispositivo se apagará pero no que el bloqueo de teclas del sistema se active. –

+1

No estoy seguro de que sea útil ya que es versión 1.1 fuente pero: goToSleep llama a GoToSleep en PowerManagerService luego goToSleepLocked luego setPowerState. Y hay un comentario en setPowerState: // Cuando el usuario presiona el botón de encendido, siempre tenemos que enviar la notificación // de que se va a dormir para que el bloqueo de teclas continúe. Pero // nosotros no podemos hacer eso hasta que la pantalla se desvanezca, entonces no lo hacemos t muestra el bloque de teclas // demasiado pronto. – JRL

+0

Y en LockPatternKeyguardView hay una llamada a ScreenLock de la siguiente manera: Ver createLockScreen() {return new LockScreen ( mContext, mLockPatternUtils, mUpdateMonitor, mKeyguardScreenCallback); } – JRL

Cuestiones relacionadas