前几天有个国外项目,有个需求是锁屏时按power键不能弹出关机界面。
之前没人改过这个,网上查也没有类似案例,然后只能一步一步跟代码了。
查阅相关的文章和翻代码,发现关机流程在PhoneWindowManager.java里面
frameworks/base/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java
修改思路为在系统接收power键动作时 对弹出的关机对话框进行是否锁屏的判断 然后再选择是否显示对话框
sendCloseSystemWindows(SYSTEM_DIALOG_REASON_GLOBAL_ACTIONS);
showGlobalActionsDialog();
这两句就是在
mPowerLongPress中的
关机对话框
引入KeyGuardManager
import android.app.KeyguardManager;
private KeyguardManager mKeyguardManager;
然后 加入一个判断系统当前是否为锁屏状态 返回boolean值
//*/add start for shutdown dialog
public boolean isLockScreenOn() {
mKeyguardManager = (KeyguardManager) mContext.getSystemService(Context.KEYGUARD_SERVICE);
if (mKeyguardManager.inKeyguardRestrictedInputMode()) {
return true;
} else {
return false;
}
}
//*/add end
通过获取的布尔值来判断系统是否为锁屏
private final Runnable mPowerLongPress = new Runnable() {
......
case LONG_PRESS_POWER_GLOBAL_ACTIONS:
mPowerKeyHandled = true;
if (!performHapticFeedbackLw(null, HapticFeedbackConstants.LONG_PRESS, false)) {
performAuditoryFeedbackForAccessibilityIfNeed();
}
//*/add start for shutdown dialog
if (isLockScreenOn() == false) {
sendCloseSystemWindows(SYSTEM_DIALOG_REASON_GLOBAL_ACTIONS);
showGlobalActionsDialog();
}
//*/add end
break;
case LONG_PRESS_POWER_SHUT_OFF:
.......
}
然后编译push进设备 运行正常 问题解决