Pregunta

Me gustaría para bloquear la pantalla. Quiero desactivar la tecla de inicio y sólo usar la llave. ¿Cómo puedo lograr esto?

¿Fue útil?

Solución

Utilice este método para inhabilitar la tecla Inicio en Android

@Override
public void onAttachedToWindow() {
    this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD);
    super.onAttachedToWindow();
}

Otros consejos

He encontrado una manera de hacer frente a la tecla INICIO. Para su aplicación ajustar el manifiesto como

<action android:name="android.intent.action.MAIN" />              
<category android:name="android.intent.category.HOME" />                 
<category android:name="android.intent.category.DEFAULT" />               
<category android:name="android.intent.category.MONKEY"/>

Ahora su aplicación es una aplicación alternativa Launcher.

El uso del ADB, y desactivar el lanzador de aplicaciones usando el gestor de paquetes

pm disable com.android.launcher2

Ahora, la pulsación de tecla Inicio permanecerá siempre en la misma pantalla.

Esta solución funciona solamente hasta 3.x.

De acuerdo, esto se supone que es una pregunta difícil. Pero aquí es una manera de romperlo.

Anular el siguiente método en su actividad,

@Override
public void onAttachedToWindow() {
    super.onAttachedToWindow();
    this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD);           
}

Y ahora controlar el evento clave de esta manera,

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
   if(keyCode == KeyEvent.KEYCODE_HOME)
    {
     Log.i("Home Button","Clicked");
    }
   if(keyCode==KeyEvent.KEYCODE_BACK)
   {
        finish();
   }
 return false;
}

Añadir este código a su clase MainActivity:

Timer timer;
MyTimerTask myTimerTask;

@Override
protected void onResume() {
    super.onResume();

    if (timer != null) {
        timer.cancel();
        timer = null;
    }
}

@Override
protected void onPause()
{
    if (timer == null) {
        myTimerTask = new MyTimerTask();
        timer = new Timer();
        timer.schedule(myTimerTask, 100, 100);
    }

    super.onPause();
}

private void bringApplicationToFront()
{
    KeyguardManager myKeyManager = (KeyguardManager)getSystemService(Context.KEYGUARD_SERVICE);
    if( myKeyManager.inKeyguardRestrictedInputMode())
        return;

    Log.d("TAG", "====Bringging Application to Front====");

    Intent notificationIntent = new Intent(this, MainActivity.class);
    notificationIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
    PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0);
    try
    {
        pendingIntent.send();
    }
    catch (PendingIntent.CanceledException e)
    {
        e.printStackTrace();
    }
}

public void onBackPressed() {
    // do not call super onBackPressed.
}

class MyTimerTask extends TimerTask {
    @Override
    public void run() {
        bringApplicationToFront();
    }
}

No es un bloqueo para el botón de 'casa', pero el usuario no puede cambiar a otra aplicación durante mucho tiempo (más de 100 milisegundos), tal vez esto es lo que desea.

Para deshabilitar el botón de inicio, intente lo siguiente:

@Override
public void onAttachedToWindow() {
    this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD);
    super.onAttachedToWindow();
}

Problema con la barra de notificación tira hacia abajo puede ser resuelto por ocultación barra de notificaciones como aquí:

public void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    setContentView(R.layout.xxxx);
    getWindow().addFlags(LayoutParams.FLAG_FULLSCREEN);
    ....
}

o el tema de pantalla completa conjunto para su actividad o en el manifiesto de aplicación:

android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top