2010-07-03 8 views
21

Je souhaite être en mesure de détecter l'événement de verrouillage du téléphone. Lorsque mon application est en cours d'exécution, si j'appuie sur le bouton rouge (bouton de fin d'appel/bouton d'alimentation), le téléphone se verrouille et l'écran devient vide. Je veux être capable de détecter cet événement, est-ce possible?Android détecter l'événement de verrouillage du téléphone

Répondre

12

Avoir un récepteur de diffusion

android.intent.action.SCREEN_ON 

et

android.intent.action.SCREEN_OFF 

connexes: Lire réponseHere de CommonsWare.

+15

Pour mémoire - verrouiller off/n'est pas le même événement que l'écran off/on. – greenoldman

+2

L'écran s'éteint même lorsque l'écran s'éteint lors d'un appel téléphonique –

+0

Voici un exemple de ceci qui n'attrape pas l'écran de verrouillage: sur Android 5, si je change d'utilisateur, l'OS passe à l'écran de verrouillage sans éteindre l'écran. – Sam

32

Sinon, vous pouvez le faire:

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

    // If the screen is off then the device has been locked 
    PowerManager powerManager = (PowerManager) getSystemService(POWER_SERVICE); 
    boolean isScreenOn; 
    if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT_WATCH) { 
     isScreenOn = powerManager.isInteractive(); 
    } else { 
     isScreenOn = powerManager.isScreenOn(); 
    } 

    if (!isScreenOn) { 

     // The screen has been locked 
     // do stuff... 
    } 
} 
+0

Avez-vous besoin d'ajouter une permission au manifeste de l'application pour celui-ci? – pqn

+1

Essayé cela, et pas besoin d'ajouter la permission – HVNSweeting

+1

Je pense que cela vérifie seulement si écran ou non, pas vérifier le verrou. Cela peut se mélanger avec FLAG_KEEP_SCREEN_ON, donc l'écran n'est désactivé que lorsque vous verrouillez l'écran. http://developer.android.com/reference/android/os/PowerManager.html#isScreenOn() qu'en est-il de vérifier déverrouillé? (pas sur l'écran) – HVNSweeting

Questions connexes