2010-09-19 15 views
32

¿Podemos apagar un teléfono Android programáticamente?Desactivando programáticamente el teléfono Android

Segunda pregunta: cómo bloquear y desbloquear la pantalla en Android?

Estoy usando el siguiente fragmento, pero no funcionó para mí.

KeyguardManager keyguardManager = (KeyguardManager) getSystemService(Activity.KEYGUARD_SERVICE); 
KeyguardLock lock = keyguardManager.newKeyguardLock(KEYGUARD_SERVICE); 

lock.disableKeyguard(); // to disable 

lock.reenableKeygaurd();// to enable 

y yo también utilizamos el permiso.

+8

Por favor, no pregunte cosas diferentes dentro de la misma pregunta. – Flow

+1

Compruebe mi respuesta: http://stackoverflow.com/questions/2927083/how-to-realize-the-shutdown-using-code/8759117#8759117 Es posible con un teléfono raíces. – Rob

+0

Downvoted porque hizo dos preguntas en una publicación. – unforgettableid

Respuesta

14

Usted podría utilizar el PowerManager para hacer que se reinicie (esto no garantiza que va a reiniciar - OS puede anularlo):

http://developer.android.com/reference/android/os/PowerManager.html#reboot(java.lang.String)

Se requiere el permiso de reinicio:

http://developer.android.com/reference/android/Manifest.permission.html#REBOOT

¿Puede también verificar su logcat cuando intenta habilitar/deshabilitar el bloqueo de teclas, y publicar lo que está allí?

+15

No puede hacer un reinicio desde una aplicación SDK normal. Solo las aplicaciones firmadas con la clave de firma del firmware del sistema pueden hacerlo. – CommonsWare

+1

Ah, sí, es suficiente, bueno, dejaré esto para que pueda leer sobre el PowerManager ... – xil3

21

No puede hacer esto desde una aplicación de SDK normal. Solo las aplicaciones firmadas con la clave de firma del firmware del sistema pueden hacerlo.

+17

¡Y con una buena razón! –

+1

¿Conoces algún firmware que proporcione esa funcionalidad? ¿Podría recomendar alguno? Gracias. – Budda

+0

Sí, querido, sé y te recomiendo que continúes con la aplicación del sistema ... – DynamicMind

1

En realidad, las respuestas anteriores no son completamente precisas, según mi experiencia. Estaba experimentando con formas de atenuar la pantalla y se encontró que el siguiente:

Window w = getWindow(); 
WindowManager.LayoutParams lp = w.getAttributes(); 
lp.screenBrightness =.005f; 
w.setAttributes (lp); 

en realidad convertir mi Samsung Galaxy Tab fuera de si, en lugar de 0.005, utilizo un valor de brillo de la pantalla 0.

I sospecho que esto es un error en alguna parte, pero no tengo el hardware suficiente para probar el código en otros modelos de Android. Por lo tanto, realmente no puedo decirte lo que sucederá en tu teléfono. Puedo decirte que mi código se apaga de mi teléfono aunque no esté completamente firmado.

Con suerte, no me arrepiento de compartir esta información .....;) R.

+0

Esto apaga completamente la pantalla de los teléfonos en los que lo he usado. Debe ser un error extraño en tu Pestaña – stealthcopter

+0

, que en realidad era el efecto que estaba buscando en ese momento, bueno. Desde entonces, hemos reemplazado el teléfono de nuestro sistema, Y determinamos que no era una función que queríamos de todos modos, pero fue algo muy interesante de descubrir. – Rich

32

Como CommonsWare already said que esto no es posible en una aplicación SDK Ordinaria. Debe firmar su aplicación con el System Firmware Key. Pero es posible que su aplicación tenga privilegios de Root. Trate de usar el siguiente código (si tiene acceso SU):

apagado:

try { 
    Process proc = Runtime.getRuntime() 
        .exec(new String[]{ "su", "-c", "reboot -p" }); 
    proc.waitFor(); 
} catch (Exception ex) { 
    ex.printStackTrace(); 
} 

Reiniciar:

mismo código, sólo tiene que utilizar en lugar de "reboot""reboot -p".


[En una nota aparte: He leído en alguna parte que estos comandos no funcionan en la ROM de HTC, pero no han confirmado a mí mismo]

+0

mi teléfono está rooteado, presiono la aplicación en/system/app /. Pero no funciona para mí. ¿Hay algún especial en 4.0? – NovusMobile

+0

¿Aparece el diálogo de UB? ¿Qué teléfono, android y rom estás usando? – Sheharyar

+1

En mi caso, este código funciona bien cuando se ejecuta en un hilo separado (de lo contrario, su diálogo se inicia pero no está visible). ¡Gracias! – ruX

6

Una solución mucho mejor es ejecutar:

su -c am start -a android.intent.action.ACTION_REQUEST_SHUTDOWN

Puede utilizar un Process para esto.

+0

gran solución, excepto que el comando después de su debe estar entre comillas. –

5

Si usted tiene el permiso sigOrSystem android.permission.SHUTDOWN puede elevar la Intención ACTION_REQUEST_SHUTDOWN protegida de esta manera:

Intent intent = new Intent("android.intent.action.ACTION_REQUEST_SHUTDOWN"); 
intent.putExtra("android.intent.extra.KEY_CONFIRM", false); 
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
startActivity(intent); 

Tenga en cuenta que antes a Android 4.0, este permiso era sólo firma.

1

El dispositivo tiene sus raíces y por eso he utilizado a continuación código y que está funcionando perfectamente, si el dispositivo tiene sus raíces entonces se puede utilizar a continuación enfoque

dispositivo de parada

try { 
    Process proc = Runtime.getRuntime() 
        .exec(new String[]{ "su", "-c", "reboot -p" }); 
    proc.waitFor(); 
} catch (Exception ex) { 
    ex.printStackTrace(); 
} 

Dispositivo Reiniciar

try { 
    Process proc = Runtime.getRuntime() 
        .exec(new String[]{ "su", "-c", "reboot" }); 
    proc.waitFor(); 
} catch (Exception ex) { 
    ex.printStackTrace(); 
} 
Cuestiones relacionadas