当前位置: 首页 > 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

相关文章:

  • 【Linux】网络--网络层--IP协议
  • 抖音商城抓包 分析
  • 基于Python学习《Head First设计模式》第三章 装饰者模式
  • Android基于LiquidFun引擎实现软体碰撞效果
  • leetcode hot100刷题日记——35.子集
  • day17 leetcode-hot100-34(链表13)
  • 每日算法刷题计划Day20 6.2:leetcode二分答案3道题,用时1h20min
  • 从 LeetCode 到日志匹配:一行 Swift 实现规则识别
  • 力扣LeetBook数组和字符串--数组简介
  • 【软件测试】web自动化:Pycharm+Selenium+Firefox(一)
  • NodeJS全栈WEB3面试题——P8项目实战类问题(偏全栈)
  • 电脑wifi显示已禁用怎么点都无法启用
  • Java线程生命周期详解
  • GStreamer开发笔记(六):gstreamer基本概念:组件、箱柜、管道、衬垫、链接组件
  • 【存储基础】存储设备和服务器的关系和区别
  • 4、ubuntu系统 | 文本和目录操作函数
  • 设备驱动与文件系统:03 生磁盘的使用
  • Python 训练营打卡 Day 33-神经网络
  • SpringMVC的注解
  • Java设计模式之备忘录模式详解
  • 重庆网站建设letide/国内最好用免费建站系统
  • 网站制作方案怎么写/网络营销广告名词解释
  • 做网站那种语言好/营销手段有哪些
  • 电商平台建设费用/seo推广具体做什么
  • 网站备案 2016/网站搭建外贸
  • gofair外贸建站/互联网app推广具体怎么做