因为有客户需要更改关机时间,所以我们研究了整个关机过程。
当用户长按power键时,系统将调用PhoneWindowManager.java下的interceptKeyBeforeQueueing函数。
publicintinterceptkeybeforequeueing (keyevent event,int policyFlags ) {
.
case keyevent.keycode _ power : {
result=~ACTION_PASS_TO_USER;
isWakeKey=false; //wake-upwillbehandledseparately
if(down ) {
互联网(event,interactive );
} else {
interceptpowerkeyup(event,interactive,canceled );
}
布雷克;
}
.
}
interceptPowerKeyDown发送MSG_POWER_LONG_PRESS以消除浅色眼睛/pprivatevoidinterceptpowerkeydown (keyevent event,booleanintint )
.
if (! mPowerKeyHandled ) {
交互{ if }
//When interactive,we're already awake。
//waitforalongpressorforthebuttontobereleasedtodecidewhattodo。
haslongpressonpowerbehavior () () ) )。
message msg=mhandler.obtain message (msg _ power _ long _ press;
MSG.setasynchronous(true;
mhandler.sendmessage delayed (msg,
viewconfiguration.get(mcontext ).getdeviceglobalactionkeytimeout;
}
} else {
weupfrompowerkey (event.get down time );
finalintmaxcount=getmaxmultipresspowercount (;
if(maxcount=1) {
mPowerKeyHandled=true;
} else {
mBeganFromNonInteractive=true;
}
}
}
.
}
privateclasslgdsbextendshandler {
@Override
公共消息(消息msg )。
.
case MSG_POWER_LONG_PRESS:
powerLongPress (;
布雷克;
.
}
powerLongPress根据用power键设置的值执行相应的代码
private void powerLongPress (
finalintbehavior=getresolvedlongpressonpowerbehavior (;
开关(behavior ) {
case long _ press _ power _ nothing :
布雷克;
case long _ press _ power _ global _ actions :
mPowerKeyHandled=true;
if (! performhapticfeedbacklw(null,hapticfeedbackconstants.long _ press,false ) }
performauditoryfeedbackforaccessibilityifneed (;
}
showGlobalActionsInternal (
布雷克;
case long _ press _ power _ shut _ off :
case long _ press _ power _ shut _ off _ no _ confirm 3360
mPowerKeyHandled=true;
performhapticfeedbacklw(null,hapticfeedbackconstants.long _ press,false );
sendclosesystemwindows (system _ dialog _ reason _ global _ actions;
mwindowmanagerfuncs.shut down (behavior==long _ press _ power _ shut _ off );
布雷克;
}
}
power长按执行代码在config.xml中设定
1