在PhoneWindowManager利用enableKeyguard()直接处理解锁和锁屏,快速按时也生效,如果在KeyguardViewManager解锁,夸进程还要模拟发按键,在KeyguardViewManager里面处理,有时快速按按键,还不能解锁。
frameworks\base\policy\src\com\android\internal\policy\impl\PhoneWindowManager.java
public class PhoneWindowManager implements WindowManagerPolicy {
...
static private boolean Zxkeyguardstatus = true; //zxw add
...
@Override
public int interceptKeyBeforeQueueing(KeyEvent event, int policyFlags, boolean isScreenOn) {
if (!mSystemBooted) {
// If we have not yet booted, don't let key events do anything.
return 0;
}
...
if (keyCode == KeyEvent.KEYCODE_POWER) {
policyFlags |= WindowManagerPolicy.FLAG_WAKE;
if(Zxkeyguardstatus == false)
enableKeyguard(true); //modify by zxw add for lockkeydown,enableKeyguard(false);
}
///wangsong set the star/F12 wake power off -s@{
if (keyCode == KeyEvent.KEYCODE_F12 || keyCode == KeyEvent.KEYCODE_F10) {
policyFlags |= WindowManagerPolicy.FLAG_WAKE;
}
///modify end @}
//zxw add start
if((keyCode == KeyEvent.KEYCODE_F11)&&(event.getAction() == KeyEvent.ACTION_DOWN))
{
Log.d("zxw keycode","lock");
if(Zxkeyguardstatus == false) //zxw add
enableKeyguard(true);
mPowerManager.goToSleep(SystemClock.uptimeMillis());
}
if((keyCode == KeyEvent.KEYCODE_F12)&&(event.getAction() == KeyEvent.ACTION_DOWN))
{
Log.d("zxw keycode","unlock");
//simulateKeystroke(KeyEvent.KEYCODE_F10);
//simulateKeystroke(KeyEvent.KEYCODE_F10);
enableKeyguard(false); //zxw add
}
//zxw add end
...
}
...
/** {@inheritDoc} */
public void enableKeyguard(boolean enabled) {
Zxkeyguardstatus = enabled; //zxw add
if (mKeyguardDelegate != null) {
mKeyguardDelegate.setKeyguardEnabled(enabled);
}
}
...
}