当前位置: 首页 > news >正文

20250602在荣品的PRO-RK3566开发板的Android13下打开关机对话框

20250602在荣品的PRO-RK3566开发板的Android13下打开关机对话框
2025/6/2 15:07


缘起:需要在荣品的PRO-RK3566开发板的Android13下,打开/增加关机对话框这个功能。
因为手机都有。那我们就找资料吧。


参考资料:
https://blog.csdn.net/terry_xiwang/article/details/122721784
RK3568 Android12 长按power键功能设置

Platform: RK3566
OS: Android 13
Kernel: v5.10.157
SDK Version:?


console:/ # uname -a
Linux localhost 5.10.157 #2 SMP PREEMPT Fri May 30 14:46:55 CST 2025 aarch64 Toybox
console:/ # 


问题
在测试Android12时发现,长按power键没有反应。对比Android11,是会弹出关机菜单,有emergency,power off和 reboot 这几个选项。

解决方案
frameworks/base/core/res/res/values/config.xml 中修改config_longPressOnPowerBehavior的属性值

简单分析
查了下这应该是Android12的新特性,长按关机默认功能是唤醒Google Assistant,我的机器中没有预装该应用所以就没有任何反应。
可以在Settings——System——Gestures——Press and hold power button中关闭Hold for Assistant功能,关闭后测试长按power键是可以直接关机,但没有出现任何提示。这样也不太好,最好是能和Android11的效果类似。

跟下settings源码
RK3568的Android12在这里:
packages/apps/Settings/src/com/android/settings/gestures/LongPressPowerButtonPreferenceController.java

可以看到getSummary() 的显示是根据getPowerButtonValue() 的值来判断的

@Override
    public CharSequence getSummary() {
        final int powerButtonValue = getPowerButtonValue();
        if (powerButtonValue == LONG_PRESS_POWER_ASSISTANT_VALUE) {
            return mContext.getString(R.string.power_menu_summary_long_press_for_assist_enabled);
        } else if (powerButtonValue == LONG_PRESS_POWER_GLOBAL_ACTIONS) {
            return mContext.getString(
                    R.string.power_menu_summary_long_press_for_assist_disabled_with_power_menu);
        } else {
            return mContext.getString(
                    R.string.power_menu_summary_long_press_for_assist_disabled_no_action);
        }   
    }   


getPowerButtonValue() 是获取POWER_BUTTON_LONG_PRESS_DEFAULT_VALUE_RESOURCE的值

private int getPowerButtonValue() {
        return Settings.Global.getInt(mContext.getContentResolver(),
                POWER_BUTTON_LONG_PRESS_SETTING,
                mContext.getResources().getInteger(POWER_BUTTON_LONG_PRESS_DEFAULT_VALUE_RESOURCE));
    }   


/**
     * Value used for long press power button behaviour when the Assist setting is disabled.
     * If this value matches Assist setting, then it falls back to Global Actions panel or
     * power menu, depending on their respective settings.
*/
private static final int POWER_BUTTON_LONG_PRESS_DEFAULT_VALUE_RESOURCE =
    com.android.internal.R.integer.config_longPressOnPowerBehavior;


rootroot@rootroot-X99-Turbo:~/Android13.0/packages/apps/Settings/src/com/android/settings$ cd gestures/
rootroot@rootroot-X99-Turbo:~/Android13.0/packages/apps/Settings/src/com/android/settings/gestures$ ll
total 256
drwxrwxr-x  2 rootroot rootroot  4096 12月 10 10:07 ./
drwxrwxr-x 61 rootroot rootroot  4096 12月 10 10:07 ../
-rw-rw-r--  1 rootroot rootroot  1309 12月 10 10:07 AssistGestureFeatureProviderImpl.java
-rw-rw-r--  1 rootroot rootroot  1301 12月 10 10:07 AssistGestureFeatureProvider.java
-rw-rw-r--  1 rootroot rootroot  3515 12月 10 10:07 AssistGestureSettings.java
-rw-rw-r--  1 rootroot rootroot  4844 12月 10 10:07 AssistGestureSettingsPreferenceController.java
-rw-rw-r--  1 rootroot rootroot  5224 12月 10 10:07 BackGestureIndicatorDrawable.java
-rw-rw-r--  1 rootroot rootroot  4000 12月 10 10:07 BackGestureIndicatorView.java
-rw-rw-r--  1 rootroot rootroot  2408 12月 10 10:07 ButtonNavigationSettingsAssistController.java
-rw-rw-r--  1 rootroot rootroot  2467 12月 10 10:07 ButtonNavigationSettingsFragment.java
-rw-rw-r--  1 rootroot rootroot  2716 12月 10 10:07 DoubleTapPowerPreferenceController.java
-rw-rw-r--  1 rootroot rootroot  2350 12月 10 10:07 DoubleTapPowerSettings.java
-rw-rw-r--  1 rootroot rootroot  3339 12月 10 10:07 DoubleTapScreenPreferenceController.java
-rw-rw-r--  1 rootroot rootroot  2651 12月 10 10:07 DoubleTapScreenSettings.java
-rw-rw-r--  1 rootroot rootroot  2734 12月 10 10:07 DoubleTwistGestureSettings.java
-rw-rw-r--  1 rootroot rootroot  4418 12月 10 10:07 DoubleTwistPreferenceController.java
-rw-rw-r--  1 rootroot rootroot  2021 12月 10 10:07 GestureNavigationSettingsAssistController.java
-rw-rw-r--  1 rootroot rootroot  6209 12月 10 10:07 GestureNavigationSettingsFragment.java
-rw-rw-r--  1 rootroot rootroot  2831 12月 10 10:07 GesturePreferenceController.java
-rw-rw-r--  1 rootroot rootroot  2716 12月 10 10:07 GestureSettings.java
-rw-rw-r--  1 rootroot rootroot  3802 12月 10 10:07 GesturesSettingPreferenceController.java
-rw-rw-r--  1 rootroot rootroot  2372 12月 10 10:07 GlobalActionsPanelPreferenceController.java
-rw-rw-r--  1 rootroot rootroot  3154 12月 10 10:07 LongPressPowerFooterPreferenceController.java
-rw-rw-r--  1 rootroot rootroot  3355 12月 10 10:07 LongPressPowerForAssistantPreferenceController.java
-rw-rw-r--  1 rootroot rootroot  3360 12月 10 10:07 LongPressPowerForPowerMenuPreferenceController.java
-rw-rw-r--  1 rootroot rootroot  2872 12月 10 10:07 LongPressPowerIllustrationPreferenceController.java
-rw-rw-r--  1 rootroot rootroot  5219 12月 10 10:07 LongPressPowerSensitivityPreferenceController.java
-rw-rw-r--  1 rootroot rootroot  3666 12月 10 10:07 OneHandedActionPullDownPrefController.java
-rw-rw-r--  1 rootroot rootroot  3675 12月 10 10:07 OneHandedActionShowNotificationPrefController.java
-rw-rw-r--  1 rootroot rootroot  2655 12月 10 10:07 OneHandedEnablePreferenceController.java
-rw-rw-r--  1 rootroot rootroot  3346 12月 10 10:07 OneHandedMainSwitchPreferenceController.java
-rw-rw-r--  1 rootroot rootroot  1728 12月 10 10:07 OneHandedPreferenceCategoryController.java
-rw-rw-r--  1 rootroot rootroot  5730 12月 10 10:07 OneHandedSettings.java
-rw-rw-r--  1 rootroot rootroot 11811 12月 10 10:07 OneHandedSettingsUtils.java
-rw-rw-r--  1 rootroot rootroot  3301 12月 10 10:07 PickupGesturePreferenceController.java
-rw-rw-r--  1 rootroot rootroot  2531 12月 10 10:07 PickupGestureSettings.java
-rw-rw-r--  1 rootroot rootroot  1539 12月 10 10:07 PowerMenuPreferenceController.java
-rw-rw-r--  1 rootroot rootroot  1488 12月 10 10:07 PowerMenuSettings.java
-rw-rw-r--  1 rootroot rootroot  6982 12月 10 10:07 PowerMenuSettingsUtils.java
-rw-rw-r--  1 rootroot rootroot  7003 12月 10 10:07 PreventRingingGesturePreferenceController.java
-rw-rw-r--  1 rootroot rootroot  2900 12月 10 10:07 PreventRingingGestureSettings.java
-rw-rw-r--  1 rootroot rootroot  7787 12月 10 10:07 PreventRingingParentPreferenceController.java
-rw-rw-r--  1 rootroot rootroot  4337 12月 10 10:07 PreventRingingSwitchPreferenceController.java
-rw-rw-r--  1 rootroot rootroot  3083 12月 10 10:07 SwipeToNotificationPreferenceController.java
-rw-rw-r--  1 rootroot rootroot  2506 12月 10 10:07 SwipeToNotificationSettings.java
-rw-rw-r--  1 rootroot rootroot 15894 12月 10 10:07 SystemNavigationGestureSettings.java
-rw-rw-r--  1 rootroot rootroot  3787 12月 10 10:07 SystemNavigationPreferenceController.java
-rw-rw-r--  1 rootroot rootroot  2711 12月 10 10:07 TapScreenGesturePreferenceController.java
-rw-rw-r--  1 rootroot rootroot  2614 12月 10 10:07 TapScreenGestureSettings.java
rootroot@rootroot-X99-Turbo:~/Android13.0/packages/apps/Settings/src/com/android/settings/gestures$ 
rootroot@rootroot-X99-Turbo:~/Android13.0/packages/apps/Settings/src/com/android/settings/gestures$ grep getSummary . -R
./OneHandedEnablePreferenceController.java:    public CharSequence getSummary() {
./AssistGestureSettingsPreferenceController.java:    public CharSequence getSummary() {
./GesturePreferenceController.java:    public CharSequence getSummary() {
./TapScreenGesturePreferenceController.java:    public CharSequence getSummary() {
./TapScreenGesturePreferenceController.java:        return super.getSummary();
./PowerMenuPreferenceController.java:    public CharSequence getSummary() {
./SystemNavigationPreferenceController.java:    public CharSequence getSummary() {
rootroot@rootroot-X99-Turbo:~/Android13.0/packages/apps/Settings/src/com/android/settings/gestures$ grep longPressOnPowerBehavior . -R
./PowerMenuSettingsUtils.java:            com.android.internal.R.integer.config_longPressOnPowerBehavior;

rootroot@rootroot-X99-Turbo:~/Android13.0/packages/apps/Settings/src/com/android/settings/gestures$ Connection closing...Socket close.

RK3568的Android12在这里:
Android13.0/packages/apps/Settings/src/com/android/settings/gestures/PowerMenuSettingsUtils.java


这边可以看到最终是获取 config_longPressOnPowerBehavior 的属性值,该属性值是在frameworks/base/core/res/res/values/config.xml中定义,各个值代表的含义已注释得很明确了

<!-- Control the behavior when the user long presses the power button.
            0 - Nothing
            1 - Global actions menu
            2 - Power off (with confirmation)
            3 - Power off (without confirmation)
            4 - Go to voice assist
            5 - Go to assistant (Settings.Secure.ASSISTANT)
    -->
    <integer name="config_longPressOnPowerBehavior">5</integer>


测试属性设置为1,长按power键,出现如下界面,类似Android11的效果了
属性设置为2,长按power键,出现如下关机确认界面
这两个属性配置基本可以满足需求,问题解决

修改这里:
Z:\Android13.0\frameworks\base\core\res\res\values\config.xml

    <!-- How long to show a warning message to user before the device goes to sleep after prolonged
         user inactivity. -->
    <integer name="config_attentiveWarningDuration">30000</integer>

    <!-- Control the behavior when the user long presses the power button.
            0 - Nothing
            1 - Global actions menu
            2 - Power off (with confirmation)
            3 - Power off (without confirmation)
            4 - Go to voice assist
            5 - Go to assistant (Settings.Secure.ASSISTANT)
    -->
    <integer name="config_longPressOnPowerBehavior">3</integer>

    <!-- The time in milliseconds after which a press on power button is considered "long". -->
    <integer name="config_longPressOnPowerDurationMs">500</integer>

修改为:

    <!-- How long to show a warning message to user before the device goes to sleep after prolonged
         user inactivity. -->
    <integer name="config_attentiveWarningDuration">30000</integer>

    <!-- Control the behavior when the user long presses the power button.
            0 - Nothing
            1 - Global actions menu
            2 - Power off (with confirmation)
            3 - Power off (without confirmation)
            4 - Go to voice assist
            5 - Go to assistant (Settings.Secure.ASSISTANT)
    -->
    <integer name="config_longPressOnPowerBehavior">1</integer>

    <!-- The time in milliseconds after which a press on power button is considered "long". -->
    <integer name="config_longPressOnPowerDurationMs">500</integer>


【编译之后就修改了这里,原因未知!】
    <!-- Whether to only install system packages on a user if they're allowlisted for that user
         type. These are flags and can be freely combined.
         0  - disable allowlist (install all system packages; no logging)
         1  - enforce (only install system packages if they are allowlisted)
         2  - log (log non-allowlisted packages)
         4  - any package not mentioned in the allowlist file is implicitly allowlisted on all users
         8  - same as 4, but just for the SYSTEM user
         16 - ignore OTAs (don't install system packages during OTAs)
         Common scenarios:
          - to enable feature (fully enforced) for a complete allowlist: 1
          - to enable feature for an incomplete allowlist (so use implicit allowlist mode): 5
          - to enable feature but implicitly allowlist for SYSTEM user to ease local development: 9
          - to disable feature completely if it had never been enabled: 16
          - to henceforth disable feature and try to undo its previous effects: 0
        Note: This list must be kept current with PACKAGE_WHITELIST_MODE_PROP in
        frameworks/base/services/core/java/com/android/server/pm/UserSystemPackageInstaller.java -->
    <integer name="config_userTypePackageWhitelistMode">5</integer> <!-- 1+4+8 -->

修改为:

    <integer name="config_userTypePackageWhitelistMode">13</integer> <!-- 1+4+8 -->


参考资料
https://baijiahao.baidu.com/s?id=1717361143132016535&wfr=spider&for=pc
https://segmentfault.com/a/1190000023222360?utm_source=tag-newest

http://www.xdnf.cn/news/772435.html

相关文章:

  • Linux 中 m、mm、mmm 函数和 make 的区别
  • ⚡️ Linux grep 命令参数详解
  • Python:操作 Excel 格式化
  • 数据库管理-第332期 大数据已死,那什么当立?(20250602)
  • 关于replacedialog控件问题指南
  • JavaSwing中使用JxBroser与JavaScript进行异步通信
  • Rust 变量与可变性
  • 【Day43】
  • 日语学习-日语知识点小记-进阶-JLPT-N1阶段(10):语法单词
  • 手机归属地查询接口如何用Java调用?
  • 【存储基础】SAN存储基础知识
  • 专业数据对比工具推荐
  • Python 训练 day40
  • 揭秘 CompletedFuture 的设计精髓(深入实现分析)
  • 九.C++ 对引用的学习
  • 统计随机行走的结构占比
  • JDK21深度解密 Day 12:大规模迁移JDK21方法论
  • PAT-甲级JAVA题解(更新中...)
  • RGB888色彩格式转RGB565格式
  • 海外tk抓包简单暴力方式
  • 从 Windows 7 到 AnduinOS:安装、故障排除与远程控制指南
  • NLP学习路线图(十八):Word2Vec (CBOW Skip-gram)
  • 光伏功率预测 | BiLSTM多变量单步光伏功率预测(Matlab完整源码和数据)
  • 文件索引:数组、二叉树、二叉排序树、平衡树、红黑树、B树、B+树
  • 并查集(上)
  • javaFX eclipse配置
  • Redis数据类型操作命令
  • 考研系列—操作系统:(补充)第七章、输入输出系统
  • 第12次12: 修改和删除收货地址
  • 普通二叉树 —— 最近公共祖先问题解析(Leetcode 236)