Platform: RK3568
OS: Android 11
SDK Version:android-11.0-mid-rkr11.2
需求
Android11长按power键弹出的关机对话框默认是有3个按键:Emergency(紧急呼救),Power off(关机),Restart(重启),如下所示:
客户要求去除Emergency这个按键。
解法
在frameworks/base/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsDialog.java 中的createActionItems()
方法中屏蔽Emergency的action
diff --git a/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsDialog.java b/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsDialog.java
index ff25439a5f9f..effbc1b56139 100644
--- a/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsDialog.java
+++ b/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsDialog.java
@@ -608,8 +608,9 @@ public class GlobalActionsDialog implements DialogInterface.OnDismissListener,
// make sure emergency affordance action is first, if needed
if (mEmergencyAffordanceManager.needsEmergencyAffordance()) {
- addIfShouldShowAction(tempActions, new EmergencyAffordanceAction());
- addedKeys.add(GLOBAL_ACTION_KEY_EMERGENCY);
+ /*addIfShouldShowAction(tempActions, new EmergencyAffordanceAction());
+ addedKeys.add(GLOBAL_ACTION_KEY_EMERGENCY);*/
}
for (int i = 0; i < defaultActions.length; i++) {
@@ -655,7 +656,8 @@ public class GlobalActionsDialog implements DialogInterface.OnDismissListener,
addIfShouldShowAction(tempActions, new LogoutAction());
}
} else if (GLOBAL_ACTION_KEY_EMERGENCY.equals(actionKey)) {
- addIfShouldShowAction(tempActions, new EmergencyDialerAction());
+ //addIfShouldShowAction(tempActions, new EmergencyDialerAction());
} else {
Log.e(TAG, "Invalid global action key " + actionKey);
}
简析
之前在Android12上是有设置过长按power键的弹框功能的1,所以一开始也是想去config.xml里面找找有没有相关的属性配置,但是客户说已经参考了网上类似的方法2但没有效果。再继续查找资料,发现这篇文章3分析的比较细致,指出关机对话框的最终实现是在GlobalActionsDialog.java
中。而这篇文章4则直接点明了修改方案,我这边就不原文搬运了,自己简单捋一捋其中几个关键方法:
showOrHideDialog()
根据当前状态显示/隐藏对话框handleShow()
显示对话框createDialog()
用于创建新的对话框createActionItems()
添加各种按键action事件
因此如果想要增减/修改关机对话框的按键都可以在createActionItems()
方法中进行操作。
结果
修改后效果如下
欢迎留言讨论,感谢阅读~