Android关机分析,Android 5.1关机流程分析(长按power键对话框显示)

由于有个客户需求要改动关机的时间,所以研究了下整个关机流程。

当用户长按power键,系统调用PhoneWindowManager.java下面的interceptKeyBeforeQueueing函数。

public int interceptKeyBeforeQueueing(KeyEvent event, int policyFlags) {

......

case KeyEvent.KEYCODE_POWER: {

result &= ~ACTION_PASS_TO_USER;

isWakeKey = false; // wake-up will be handled separately

if (down) {

interceptPowerKeyDown(event, interactive);

} else {

interceptPowerKeyUp(event, interactive, canceled);

}

break;

}

......

}

interceptPowerKeyDown会发送MSG_POWER_LONG_PRESS消息

private void interceptPowerKeyDown(KeyEvent event, boolean interactive) {

......

if (!mPowerKeyHandled) {

if (interactive) {

// When interactive, we're already awake.

// Wait for a long press or for the button to be released to decide what to do.

if (hasLongPressOnPowerBehavior()) {

Message msg = mHandler.obtainMessage(MSG_POWER_LONG_PRESS);

msg.setAsynchronous(true);

mHandler.sendMessageDelayed(msg,

ViewConfiguration.get(mContext).getDeviceGlobalActionKeyTimeout());

}

} else {

wakeUpFromPowerKey(event.getDownTime());

final int maxCount = getMaxMultiPressPowerCount();

if (maxCount <= 1) {

mPowerKeyHandled = true;

} else {

mBeganFromNonInteractive = true;

}

}

}

......

}

MSG_POWER_LONG_PRESS 消息处理代码:

private class PolicyHandler extends Handler {

@Override

public void handleMessage(Message msg) {

......

case MSG_POWER_LONG_PRESS:

powerLongPress();

break;

......

}

powerLongPress会根据power键设定的值执行对应的代码

private void powerLongPress() {

final int behavior = getResolvedLongPressOnPowerBehavior();

switch (behavior) {

case LONG_PRESS_POWER_NOTHING:

break;

case LONG_PRESS_POWER_GLOBAL_ACTIONS:

mPowerKeyHandled = true;

if (!performHapticFeedbackLw(null, HapticFeedbackConstants.LONG_PRESS, false)) {

performAuditoryFeedbackForAccessibilityIfNeed();

}

showGlobalActionsInternal();

break;

case LONG_PRESS_POWER_SHUT_OFF:

case LONG_PRESS_POWER_SHUT_OFF_NO_CONFIRM:

mPowerKeyHandled = true;

performHapticFeedbackLw(null, HapticFeedbackConstants.LONG_PRESS, false);

sendCloseSystemWindows(SYSTEM_DIALOG_REASON_GLOBAL_ACTIONS);

mWindowManagerFuncs.shutdown(behavior == LONG_PRESS_POWER_SHUT_OFF);

break;

}

}

power键长按执行代码由config.xml设定

1

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值