2011-09-23 132 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); 
      } 


     } 
    }  

上面的代码确实是当按下电源按钮时,键盘锁将被解除,并且重新开始闲置的活动。跳过屏幕锁

但是,当我按下电源按钮时,键盘不会被暗淡,我必须手动解锁。

当我按下电源按钮时,我的活动窗口闪烁一秒钟,显示键盘锁窗口。

回答

0

如果您想防止手机关闭屏幕(并将手机锁定在结果中),您应该使用WakeLock。您可以使用PowerManager.newWakeLock()FLAG_KEEP_SCREEN_ON或甚至 FULL_WAKE_LOCK

+0

喜inazaruk,感谢您的回复。不过,我并不是想阻止手机进入睡眠状态。 我想要做一些事情,比如当我按下电源按钮来唤醒手机时,它会自动进入一个voiceRecognition活动,它会记录一个语音命令。如果语音命令匹配,它将解锁手机。 – star

0

这段代码可以帮助:

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

hi jon,我试着用你的代码..但是,当我按下电源按钮,我的活动窗口闪烁不到一秒钟,键盘显示出来..? – star

+0

嘿想知道如何在服务中使用此标志? – star

+0

你不能。服务无法获得'Window'实例。 –