Cómo bloquear la pantalla de un dispositivo Android

Quiero implementar la funcionalidad de locking de pantalla en mi aplicación, pero actualmente no puedo hacer que funcione. Tengo un alertaDialog que solicitará la opinión del usuario mediante el uso de un par de botones. Si el usuario presiona ‘no’, quiero bloquear la pantalla (indefinidamente, no por un tiempo determinado). ¿Cuál es la mejor manera de bloquear programáticamente la pantalla? He intentado utilizar lo siguiente pero, aunque mi diálogo se descarta, la pantalla nunca se bloquea.

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

Mi código

 import android.app.Activity; import android.app.AlertDialog; import android.app.KeyguardManager; import android.app.KeyguardManager.KeyguardLock; import android.content.DialogInterface; import android.os.Bundle; import android.view.Window; public class MyApp extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub this.getWindow().requestFeature(Window.FEATURE_NO_TITLE); super.onCreate(savedInstanceState); setContentView(R.layout.splash); startDialog(); } private void startDialog() { AlertDialog.Builder myAlertDialog = new AlertDialog.Builder(this); myAlertDialog.setMessage("Do you want to exit the application?"); myAlertDialog.setPositiveButton("Yes", new DialogInterface.OnClickListener() { // do something when the button is clicked public void onClick(DialogInterface arg0, int arg1) { System.out.println("...yes button is clicked.."); arg0.dismiss(); } }); myAlertDialog.setNegativeButton("NO", new DialogInterface.OnClickListener() { // do something when the button is clicked public void onClick(DialogInterface arg0, int arg1) { System.out.println("...clicked no..."); arg0.dismiss(); KeyguardManager keyguardManager = (KeyguardManager)getSystemService(Activity.KEYGUARD_SERVICE); KeyguardLock lock = keyguardManager.newKeyguardLock(KEYGUARD_SERVICE); lock.reenableKeyguard(); } }); AlertDialog alert = myAlertDialog.create(); myAlertDialog.setCancelable(false); alert.setCancelable(false); alert.getWindow().setLayout(600, 400); myAlertDialog.show(); } } 

En Manifiesto agregar

  

¿Alguien sabe lo que estoy haciendo mal?

Hay dos formas de bloquear la pantalla:

 PowerManager manager = (PowerManager) getSystemService(Context.POWER_SERVICE); // Choice 1 manager.goToSleep(int amountOfTime); // Choice 2 PowerManager.WakeLock wl = manager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "Your Tag"); wl.acquire(); wl.release(); 

Este permiso es necesario:

  

ACTUALIZAR:

El brillo de pantalla tiene un valor entre 0 y 1. Si el valor se establece en un número negativo, se establecerá en el brillo de pantalla predeterminado. Al cambiar el brillo a 0, el brillo será lo suficientemente bajo para que la pantalla se apague automáticamente.

 WindowManager.LayoutParams params = getWindow().getAttributes(); params.screenBrightness = 0; getWindow().setAttributes(params); 

Esto y esto pueden ayudarte aún más.

ACTUALIZACIÓN 2:

Aquí hay algunos enlaces a métodos que se han utilizado para bloquear la pantalla:

http://rdcworld-android.blogspot.in/2012/03/lock-phone-screen-programmtically.html

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

Intenta anularlo así:

  @Override protected void onResume() { // TODO Auto-generated method stub WindowManager.LayoutParams params = getWindow().getAttributes(); params.screenBrightness = 1; getWindow().setAttributes(params); super.onResume(); } 

Me ayuda: D

Acabo de pasar todo un día decidiendo si simplemente cambiar el brillo de la pantalla a 0 o solo procesar el locking.

¡Aquí hay un ejemplo completo en github para aquellos de ustedes que deseen ver todo el código requerido en acción! ¡No olvides echar un vistazo al archivo lock.xml! ¡Ahí es donde van todas las políticas de usos! se ve un poco así exactamente!