2011-09-23 4 views
0
protected void onPause() 
    { 
     super.onPause();   

     // If the screen is off then the device has been locked 
     PowerManager powerManager = (PowerManager) getSystemService(POWER_SERVICE); 
     boolean isScreenOn = powerManager.isScreenOn(); 

     //screen locked 
     if (!isScreenOn) { 

      boolean pressed = onKeyDown(26, null); 

      //power button pressed 
      if(pressed){ 
       //remove keyguard 
       getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED);     
       getWindow().addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD); 

       //start intent 
       Intent i = new Intent(this, VoiceRecognitionActivity.class); 
       startActivity(i); 
      } 


     } 
    }  

le code ci-dessus est lorsque le bouton d'alimentation est enfoncé, le verrouillage du clavier sera rejeté et l'activité surpaused sera repris. Toutefois, le verrouillage du clavier n'est pas coupé lorsque j'ai appuyé sur le bouton d'alimentation, et je dois le déverrouiller manuellement.ignorer le verrouillage d'écran

Lorsque j'ai appuyé sur le bouton d'alimentation, la fenêtre de mon activité a clignoté pendant une seconde et la fenêtre du clavier est affichée.

Répondre

0

Si vous voulez empêcher le téléphone d'éteindre l'écran (et de verrouiller le téléphone), vous devez utiliser WakeLock. Vous pouvez utiliser PowerManager.newWakeLock() avec FLAG_KEEP_SCREEN_ON ou même FULL_WAKE_LOCK.

+0

salut inazaruk, je vous remercie pour votre réponse. Cependant, je n'essaie pas d'empêcher le téléphone de dormir. Je veux faire quelque chose comme quand j'ai appuyé sur le bouton d'alimentation pour réveiller le téléphone, il ira automatiquement dans une activité de reconnaissance vocale où il va enregistrer une commande vocale. Si la commande vocale correspond, cela débloquera le téléphone. – star

0

Cet extrait de code peut aider:

final Window win = getWindow(); 
    win.addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED 
      | WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD); 
    // Turn on the screen unless we are being launched from the AlarmAlert 
    // subclass. 
    final boolean screenOff = getIntent().getBooleanExtra(SCREEN_OFF, false); 
    if (!screenOff) { 
     try { 
      // API 8+ 
      win.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON 
        | WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON 
        | WindowManager.LayoutParams.FLAG_ALLOW_LOCK_WHILE_SCREEN_ON); 
     } catch (final Throwable whocares) { 
      // API 7+ 
      win.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON 
        | WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON); 
     } 
    } 
+0

salut jon, j'ai essayé avec votre code .. cependant, quand j'appuie sur le bouton d'alimentation, ma fenêtre d'activité clignote moins d'une seconde et le protège-clavier montré ..? – star

+0

hey se demandant comment puis-je utiliser ce drapeau dans un service? – star

+0

vous ne pouvez pas. Le service n'a aucun moyen d'obtenir une instance 'Window'. –