2010-01-04 15 views
0

Si vous avez déjà essayé d'écrire une application sur Android casier que vous rencontrez ce problème:Android - capture/supprime les événements des boutons Home et EndCall?

boolean mBackPressed = false; 

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) { 
    if (event.getAction() == KeyEvent.ACTION_DOWN) { 
     switch (keyCode) { 
     case KeyEvent.KEYCODE_BACK: 
      mBackPressed = true; 
      break; 
     case KeyEvent.KEYCODE_MENU: 
      if (mBackPressed) 
       unLock(); 
      break; 
     default: 
      mBackPressed = false; 
      showMessage(); 
      break; 
     } 
    } 
    return true; 
} 

private void showMessage() { 
    Toast.makeText(getBaseContext(), "Back + Menu", Toast.LENGTH_SHORT) 
      .show(); 
} 

private void unLock() { 
    this.setResult(Activity.RESULT_OK); 
    this.finish(); 
} 

On dirait que onKeyDown est filtre toutes les clés mais « Retour » et « Menu » ...
Eh bien, ce n'est pas vrai! Le bouton d'accueil vous apportera toujours l'écran d'accueil et le bouton Fin d'appel exécutera l'application native Locker!

de sortir de Fellow aussi y prétendre comme un problème:
How to listen from ENDCALL button
problem With Home Back screen button
Supressing Key presses in Activity, especially in Options Menu
Issue 4202: Feature Suggestion: permission for intercepting KEYCODE_CALL

connaissez-vous une solution de contournement pour bloquer deux ces boutons?
Est le seul moyen (aussi souvent) - write in C?

Répondre

7

Vous pouvez capture the Back key quite easily.

Je ne pense pas que vous serez en mesure d'intercepter les boutons Accueil et Fin d'appel. Si vous le pouviez, cela permettrait à une application malveillante d'empêcher un utilisateur de le quitter, détournant effectivement le téléphone.

Une option pour votre application serait d'écrire un écran d'accueil de remplacement en utilisant le android.intent.category.HOME Intent.

+0

Ugh ... J'ai égaré quelques boutons là ... désolé pour ça. c'est le Home and EndCall que je dois gérer. –

+1

Parler d'une application malveillante, je crois que l'utilisateur peut toujours réinitialiser le téléphone ou quelque chose comme ça. Bien sûr, c'est un problème mais seulement une fois par malveillant. –

+0

Je pense que c'est par conception que vous ne pouvez pas capturer Home et EndCall afin que l'utilisateur puisse toujours laisser une application de la même manière. Une option pour vous pourrait être d'écrire un écran d'accueil de remplacement en utilisant l'intention 'android.intent.category.HOME'. –