Question

Je voudrais verrouiller l'écran. Je veux désactiver la clé de la maison et utiliser uniquement la clé arrière. Comment puis-je y parvenir?

Était-ce utile?

La solution

Utilisez cette méthode pour désactiver la touche Home dans Android

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

Autres conseils

J'ai trouvé un moyen de lutter contre la touche HOME. Pour votre application définir le manifeste comme

<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"/>

Maintenant votre application est une application de lancement alternatif.

Utilisez le adb, et désactiver l'application lanceur en utilisant le gestionnaire de paquets

pm disable com.android.launcher2

Maintenant la presse touche Accueil restera toujours dans le même écran.

Cette solution fonctionne jusqu'à 3.x seulement.

D'accord, cela était censé être une question difficile. Mais voici une façon de le casser.

surchargent ci-dessous méthode dans votre activité,

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

Et maintenant gérer l'événement clé comme celui-ci,

@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;
}

Ajoutez ce code à votre classe 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();
    }
}

Il est pas un blocage pour le bouton « home », mais l'utilisateur ne peut pas passer à une autre application pendant une longue période (plus de 100 millisecondes), peut-être c'est ce que vous voulez.

Pour désactiver le bouton d'accueil, essayez ceci:

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

Problème barre de notification tiré vers le bas peut être résolu par la barre de notification cachette comme ici:

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

ou un ensemble de thème pour votre activité en plein écran ou application dans le manifeste:

android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top