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

article/2025/6/26 22:14:59

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.hkcw.cn/article/iiFFwRnnyR.shtml

相关文章

mac电脑安装 nvm 报错如何解决

前言 已知&#xff1a;安装nvm成功&#xff1b;终端输入nvm -v 有版本返回 1. 启动全局配置环境变量失败 source ~/.zshrc~ 返回&#xff1a; source: no such file or directory: /Users/你的用户名/.zshrc~2 安装node失败 nvm install 16.13返回&#xff1a; mkdir: /U…

SOC-ESP32S3部分:26-物联网MQTT连云

飞书文档https://x509p6c8to.feishu.cn/wiki/IGCawAgqFibop7kO83KcsDFBnNb ESP-MQTT 是 MQTT 协议客户端的实现&#xff0c;MQTT 是一种基于发布/订阅模式的轻量级消息传输协议。ESP-MQTT 当前支持 MQTT v5.0。 特性 支持基于 TCP 的 MQTT、基于 Mbed TLS 的 SSL、基于 WebSo…

樊振东德国看球笑容满面 现身欧冠决赛现场

樊振东德国看球笑容满面 现身欧冠决赛现场!5月31日,樊振东在社交媒体上晒照发文:Guten Morgen, Mnchen! 早上好,慕尼黑!樊振东将作为特邀嘉宾现身欧冠决赛现场,观看巴黎圣日耳曼对阵国际米兰的比赛。这场2024至2025赛季欧洲足坛的巅峰对决将于北京时间6月1日凌晨在慕尼黑…

财经观察:一颗大豆的全球化博弈

【环球时报综合报道】编者的话:美国农业部出口检验报告显示,截至2025年5月15日的一周,美国大豆出口检验量较一周前减少50%,为21.78万吨,远低于市场普遍预期的42.5万吨。外媒分析称,受美国发起的关税战影响,美国大豆出口下降,巴西、阿根廷等国正在抓紧拓展中国大豆市场。…

(16)课35:分组时可以指定多个列名,以进行更细致的分组。窗口函数的练习例题:例题一学生成绩,

&#xff08;84&#xff09;分组时可以指定多个列名&#xff0c;一言也是这么说的 &#xff1a; 测试一下 &#xff1a; &#xff08;85&#xff09;练习一 &#xff1a; 针对该表完成第二个例题 &#xff1a; &#xff08;86&#xff09; 例题二 &#xff1a; &#xff08;8…

聚类分析 | MATLAB实现基于SOM自组织特征映射聚类可视化

聚类分析 | MATLAB实现基于SOM自组织特征映射聚类可视化 目录 聚类分析 | MATLAB实现基于SOM自组织特征映射聚类可视化效果一览 完整代码&#xff1a;[聚类分析 | MATLAB实现基于SOM自组织特征映射聚类可视化](https://blog.csdn.net/kjm13182345320/article/details/148350983…

【C++】23. unordered_map和unordered_set的使用

1. unordered_set系列的使用 1.1 unordered_set和unordered_multiset参考文档 https://legacy.cplusplus.com/reference/unordered_set/ 1.2 unordered_set类的详细介绍 • unordered_set的声明模板如下&#xff1a; template<class Key,class Hash std::hash<Ke…

意识之谜 | 粒子组合与单一意识的诞生

注&#xff1a;本文为“脑意识”相关合辑。 略作重排&#xff0c;未做探析。 从粒子到意识&#xff1a;人类大脑单意识诞生之谜 一、单个粒子无意识的本质原因 单个粒子作为物质的基本单元&#xff0c;仅遵循物理化学规律进行运动和相互作用&#xff0c;其行为具有机械性与确…

【更新至2023年】2000-2023年上市公司绿色专利申请授权面板数据

2000-2023年上市公司绿色专利申请授权面板数据 1、时间&#xff1a;2000-2023年 2、来源&#xff1a;国家知识产权局、WPIO清单 3、指标&#xff1a;年份、股票代码、股票简称、行业名称、行业代码、省份、城市、区县、区县代码、上市状态、绿色专利申请总量、绿色发明专利申…

第4章:操作系统

操作系统目的是&#xff1a;为了填补人与机器之间的鸿沟&#xff0c;即建立用户与计算机之间的接口&#xff0c;而为裸机配置的一种系统软件。 系统软件&#xff1a;编辑程序、汇编程序、编译程序、数据库管理系统等 操作系统在计算机系统中的地位&#xff1a; 程序与进程 程…

可靠性方框图绘制说明

下载安装绘制软件&#xff08;Isograph&#xff09;&#xff1a; Isograph Reliability Workbench 14.0 链接&#xff1a;https://pan.baidu.com/s/1owsSJWLtkqAQhbpWdK8keA?pwd49iu 提取码&#xff1a;49iu 制作可靠性方框图 创建RBD&#xff08;可靠性方框图&#xff…

Nougat:用于学术文档的神经光学理解

摘要 科学知识主要以PDF形式存储于书籍和科学期刊中。然而&#xff0c;PDF格式会导致语义信息的丢失&#xff0c;尤其是在数学表达式方面。我们提出了Nougat&#xff08;Neural Optical Understanding for Academic Documents&#xff09;&#xff0c;这是一种Visual transfor…

移除3D对象的某些部分点云

1&#xff0c;目的 移除3D对象指定区域的点云。效果 2&#xff0c;原理。 通过投影剔除指定区域外的点云数据。 3&#xff0c;主要的算子。 3.1&#xff0c;gen_image_gray_ramp 是 Halcon 中用于生成‌线性灰度渐变图像‌的算子 功能概述‌ 数学原理‌ 生成的图像灰度值…

达芬奇(DaVinci Resolve)下载安装教程

目录 一、软件介绍 二、软件下载 2.1 浏览器访问官网 2.2 进行软件包下载 三、软件安装 3.1 解压软件包 3.2 安装软件 四、基本配置 4.1 语言设置 4.2 其他设置 一、软件介绍 达芬奇&#xff08;DaVinci Resolve&#xff09;视频调色软件。DaVinci Resolve汇集剪辑、…

教室门口160cm是小学生低头线 高中版引发热议

教室门口160cm是小学生低头线!5月27日,山东济宁某高中教室内发生了一件有趣的事情。课间休息时,一位老师注意到学生们普遍较高,旁边正好站着一个身高182厘米的男生,于是老师以他为参照,在教室门口贴上一条胶带作为身高线。结果发现,不少男生经过时都需要低头,这一现象迅…

印尼力邀中企深化产业下游化 共创可持续发展

在印尼谈到与中国的经贸合作,“下游化”是最常提到的词。印尼国土辽阔,镍矿资源的储量和产量皆名列全球第一。坐拥全球绿色能源转型的关键金属,印尼吸引了大量全球投资者。单纯出口原始矿藏对当地就业帮助甚少,且由于附加值低,对印尼财政增收贡献有限。为此,印尼近10年来…

《天下第一楼》迎第600场演出 经典传承再续辉煌

6月2日晚,由何冀平编剧,夏淳、顾威、闫锐导演的北京人艺经典话剧《天下第一楼》在首都剧场迎来第600场演出。北京人艺院长冯远征当天再次强调了“深入生活、体验生活”对创作者的重要性。这部作品讲述了上个世纪初北京城饮食界老字号饭庄“福聚德”在时代变迁中的兴衰史。自1…

2022年上半年软件设计师下午试题

答案&#xff1a; 试题一&#xff1a; 试题二&#xff1a; 试题三&#xff1a; 试题四&#xff1a; 试题五: 试题六&#xff1a;

前端高频面试题2:JavaScript/TypeScript

1.什么是类数组对象 一个拥有 length 属性和若干索引属性的对象就可以被称为类数组对象&#xff0c;类数组对象和数组类似&#xff0c;但是不能调用数组的方法。常见的类数组对象有 arguments 和 DOM 方法的返回结果&#xff0c;还有一个函数也可以被看作是类数组对象&#xff…

花卉目标检测数据集介绍(共 12 类,10490 张图像)

在计算机视觉与智能农业快速发展的背景下&#xff0c;基于深度学习的花卉识别与检测技术正被广泛应用于植物分类、智能园艺、自动监测与生态研究等多个领域。为了推动花卉类目标检测任务的发展&#xff0c;本文介绍一个包含 12 种常见花卉类别的目标检测数据集&#xff0c;总计…