base/services/core/java/com/android/server/policy/PhoneWindowManager.java
方法一:
down之后
mPowerManager.shutdown(false,"userrequested",false);
这个方法源码的解释是
@param confirm If true, shows a shutdown confirmation dialog.
* @param reason code to pass to android_reboot() (e.g. "userrequested"), or null.
* @param wait If true, this call waits for the shutdown to complete and does not return.
第一个参数如果是true,就会有对话框提示是否关机,第二个参数给系统一个reason,记不住就写null,第三个参数没理解,就是等关机完成且不返回吧。反正false就行了。
下面的方法用到的mWindowManagerFuncs.shutdown(false);换成true也是会有对话框
这个是在
frameworks/base/services/core/java/com/android/server/policy/WindowManagerPolicy.java
这里面的interface接口WindowManagerFuncs,有shutdown方法,
方法二:
在对应的键值响应case里面,比如说
case KeyEvent.KEYCODE_POWER:
if (down) {
mHandler.sendMessage(mHandler.obtainMessage(MSG_POWER_SHUT_DOWN));
这个MSG_POWER_SHUT_DOWN消息是自己加的
增加变量
private static final int MSG_POWER_SHUT_DOWN = 31;
然后在PolicyHandler处理message,handleMessage 方法
加入
case MSG_POWER_SHUT_DOWN:
mWindowManagerFuncs.shutdown(false);
break;
注意直接调用这个方法在down下面亲测不生效,还得消息机制才能触发,我理解是这个方法不能在主线程里同步执行,只能异步,所以用handler消息