20250925让荣品RD-RK3588-MID开发板的Android13系统在长按3s才弹出关机对话框

20250925让荣品RD-RK3588-MID开发板的Android13系统在长按3s才弹出关机对话框

2025/9/25 19:58

缘起:一句话,PM要求。

因为是备选方法,也就是使用非常方法达成目的了!

但是有更好方法。成为仅为参考/做笔记!

DeepSeek:配置RK3588+Android13在长按3秒之后才弹出来关机对话框

  1. 修改电源管理器配置
    编辑 frameworks/base/services/core/java/com/android/server/policy/PhoneWindowManager.java:

java

// 在全局常量定义区域添加

private static final int LONG_PRESS_POWER_TIMEOUT = 3000; // 3秒

// 修改interceptKeyBeforeQueueing方法中的相关逻辑

case KeyEvent.KEYCODE_POWER:

if (down) {

// 设置长按超时时间为3秒

mPowerKeyTriggered = true;

mHandler.removeCallbacks(mPowerLongPress);

mHandler.postDelayed(mPowerLongPress, LONG_PRESS_POWER_TIMEOUT);

} else {

mPowerKeyTriggered = false;

mHandler.removeCallbacks(mPowerLongPress);

}

break;

在JAVA程序中延迟3秒

在Java程序中延迟3秒,我们可以使用Thread.sleep()方法。但是要注意,Thread.sleep()可能会抛出InterruptedException,所以我们需要处理这个异常,通常是用try-catch块包围起来。

另外,需要注意的是,Thread.sleep()的参数是毫秒,所以3秒就是3000毫秒。

下面是一个简单的示例,展示如何在当前线程中延迟3秒。

在Java程序中延迟3秒有多种实现方式,以下是几种常见的方法:

  1. 使用 Thread.sleep()(最常用)
    java
    try {
    // 延迟3秒(3000毫秒)
    Thread.sleep(3000);
    } catch (InterruptedException e) {
    // 处理中断异常
    Thread.currentThread().interrupt();
    e.printStackTrace();
    }

Y:\android13-20250818\frameworks\base\services\core\java\com\android\server\policy\PhoneWindowManager.java

Z:\rk-android13-20250818RD-RK3588-MID\frameworks\base\services\core\java\com\android\server\policy\PhoneWindowManager.java

if (mDoublePressOnPowerBehavior != MULTI_PRESS_POWER_NOTHING) {

return 2;

}

return 1;

}

private void powerLongPress(long eventTime) {

final int behavior = getResolvedLongPressOnPowerBehavior();

Slog.d(TAG, "powerLongPress: eventTime=" + eventTime

  • " mLongPressOnPowerBehavior=" + mLongPressOnPowerBehavior);

switch (behavior) {

case LONG_PRESS_POWER_NOTHING:

break;

case LONG_PRESS_POWER_GLOBAL_ACTIONS:

mPowerKeyHandled = true;

// 2025/9/25 18:04 wenyuanbo Add
Slog.d(TAG, "sleep 3s start++++");
try {
// 3000 milliseconds = 3 seconds
Thread.sleep(3000);
} catch (InterruptedException e) {
// Handle interrupt exceptions
Thread.currentThread().interrupt();
e.printStackTrace();
}
Slog.d(TAG, "sleep 3s End----");

performHapticFeedback(HapticFeedbackConstants.LONG_PRESS_POWER_BUTTON, false,

"Power - Long Press - Global Actions");

showGlobalActions();

break;

case LONG_PRESS_POWER_SHUT_OFF:

case LONG_PRESS_POWER_SHUT_OFF_NO_CONFIRM:

mPowerKeyHandled = true;

performHapticFeedback(HapticFeedbackConstants.LONG_PRESS_POWER_BUTTON, false,

"Power - Long Press - Shut Off");

sendCloseSystemWindows(SYSTEM_DIALOG_REASON_GLOBAL_ACTIONS);

mWindowManagerFuncs.shutdown(behavior == LONG_PRESS_POWER_SHUT_OFF);

break;

Y:\android13-20250818\frameworks\base\core\res\res\values\config.xml

Z:\rk-android13-20250818RD-RK3588-MID\frameworks\base\core\res\res\values\config.xml

<!-- Maximum velocity to initiate a fling, as measured in dips per second. -->

<dimen name="config_viewMaxFlingVelocity">8000dp</dimen>

<!-- Amount of time in ms the user needs to press the relevant key to bring up the

global actions dialog -->

<integer name="config_globalActionsKeyTimeout">500</integer>

<!-- Amount of time in ms the user needs to press the relevant keys to trigger the

screenshot chord -->

<integer name="config_screenshotChordKeyTimeout">0</integer>

修改为:

<!-- Maximum velocity to initiate a fling, as measured in dips per second. -->

<dimen name="config_viewMaxFlingVelocity">8000dp</dimen>

<!-- Amount of time in ms the user needs to press the relevant key to bring up the

global actions dialog -->

<integer name="config_globalActionsKeyTimeout">3000</integer>

<!-- Amount of time in ms the user needs to press the relevant keys to trigger the

screenshot chord -->

<integer name="config_screenshotChordKeyTimeout">0</integer>

rootroot@rootroot-X99-Turbo:~/rk-android13-20250818RD-RK3588-MID/frameworks$ grep config_globalActionsKeyTimeout . -R

grep: ./wilhelm/tools/hashgen/OpenSLES_IID.c: No such file or directory

grep: ./wilhelm/tools/hashgen/interfaces.c: No such file or directory

grep: ./native/include/private/binder: No such file or directory

./base/services/core/java/com/android/server/policy/SingleKeyGestureDetector.java: com.android.internal.R.integer.config_globalActionsKeyTimeout);

Binary file ./base/tools/aapt2/integration-tests/CommandTests/android-28.jar matches

./base/core/java/android/view/ViewConfiguration.java: com.android.internal.R.integer.config_globalActionsKeyTimeout);

./base/core/res/res/values/config.xml: <integer name="config_globalActionsKeyTimeout">500</integer>

./base/core/res/res/values/symbols.xml: <java-symbol type="integer" name="config_globalActionsKeyTimeout" />

./base/boot/hiddenapi/hiddenapi-max-target-o.txt:Lcom/android/internal/R$integer;->config_globalActionsKeyTimeout:I

rootroot@rootroot-X99-Turbo:~/rk-android13-20250818RD-RK3588-MID/frameworks$

参考资料:

百度:<integer name="config_longPressOnPowerDurationMs">500</integer>

CSDN: <integer name="config_longPressOnPowerDurationMs">

RK3588 长按电源按钮打开关机对话框时间修改

https://blog.csdn.net/netwalk/article/details/16356935?ops_request_misc=\&request_id=\&biz_id=102\&utm_term= <integer name="config_longPr\&utm_medium=distribute.pc_search_result.none-task-blog-2\~all\~sobaiduweb\~default-3-16356935.142\^v102\^pc_search_result_base8\&spm=1018.2226.3001.4187

https://blog.csdn.net/netwalk/article/details/16356935

设置Android设备长按Power直接关机

Android4.0.3版本中长按Power按键跳出关机选项对话框;但在一些项目会需要长按Power直接关机而不是跳出关机选项对话框。Android4.0.3源码中并无长按直接关机的代码及选项,因此需要我们自己添加。

思路及实现:

参照长按Power按键跳出的关机对话框及关机流程部分代码,可以发现涉及到长按Power按键,关机及需要实现我们需要的功能的文件集中在:

framework/base/core/res/res/values/config.xml

framework/base/policy/src/com/android/internal/policy/impl/PhoneWindowManger.java

具体修改如下:

第一步:

在PhoneWindowManager.java中

添加static final int LONG_PRESS_POWER_OFF_NOW = 3;

【看来CSDN的AI推荐算法还行。就是这里了!】

https://wenku.csdn.net/answer/2adeb8724d124c72853d6baebb38e434?spm=1001.2101.3001.6650.19\&utm_medium=distribute.pc_relevant.none-task-chatgpt-2~default~OPENSEARCH~Position-19-2adeb8724d124c72853d6baebb38e434-blog-16356935.235^v43^pc_blog_bottom_relevance_base5\&depth_1-utm_source=distribute.pc_relevant.none-task-chatgpt-2~default~OPENSEARCH~Position-19-2adeb8724d124c72853d6baebb38e434-blog-16356935.235^v43^pc_blog_bottom_relevance_base5

_integer name=config_globalActionsKeyTimeout__2500__integer - CSDN文库.mhtml

https://blog.csdn.net/mafei852213034/article/details/109818131?ops_request_misc=%257B%2522request%255Fid%2522%253A%25224d8c5a2e45fc5a7c7878d71369aaaee9%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D\&request_id=4d8c5a2e45fc5a7c7878d71369aaaee9\&biz_id=0\&utm_medium=distribute.pc_search_result.none-task-blog-2\~all\~first_rank_ecpm_v1\~rank_v31_ecpm-2-109818131-null-null.142\^v102\^pc_search_result_base8\&utm_term= <integer name%3Dconfig_longPressOnPowerDurationMs>\&spm=1018.2226.3001.4187

https://blog.csdn.net/mafei852213034/article/details/109818131

Android关机重启流程

【付费】

https://rjdeng.blog.csdn.net/article/details/48826579?spm=1001.2101.3001.6650.17\&utm_medium=distribute.pc_relevant.none-task-blog-2~default~BlogCommendFromBaidu~Rate-17-48826579-blog-16356935.235^v43^pc_blog_bottom_relevance_base5\&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2~default~BlogCommendFromBaidu~Rate-17-48826579-blog-16356935.235^v43^pc_blog_bottom_relevance_base5

https://rjdeng.blog.csdn.net/article/details/48826579

长按Power键关机从Framework到Kernel

https://blog.csdn.net/morecrazylove/article/details/141095435?ops_request_misc=%257B%2522request%255Fid%2522%253A%252266a65c4b82bd60cd350e71087d1b418b%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D\&request_id=66a65c4b82bd60cd350e71087d1b418b\&biz_id=0\&utm_medium=distribute.pc_search_result.none-task-blog-2\~all\~first_rank_ecpm_v1\~rank_v31_ecpm-8-141095435-null-null.142\^v102\^pc_search_result_base8\&utm_term=长按电源按钮打开关机对话框时间修改\&spm=1018.2226.3001.4187

https://blog.csdn.net/morecrazylove/article/details/141095435

基于RK3568 Android11 移除长按电源按键弹窗的对话框中的 [关机] 和 [紧急呼救] 选项(详细分析)

https://forlinx-book.yuque.com/rh74yu/rkword/smyx368w5ey95261

这边只找到了这个,和您的需求不太一样,是参考的我们的方法吗

https://blog.csdn.net/MyLovelyJay/article/details/129200991

长按电源按钮打开关机对话框时间修改

你可以参考这个网上的修改方案

DeepSeek:

在JAVA程序中延迟3秒

在Java程序中延迟3秒,我们可以使用Thread.sleep()方法。但是要注意,Thread.sleep()可能会抛出InterruptedException,所以我们需要处理这个异常,通常是用try-catch块包围起来。

另外,需要注意的是,Thread.sleep()的参数是毫秒,所以3秒就是3000毫秒。

下面是一个简单的示例,展示如何在当前线程中延迟3秒。

在Java程序中延迟3秒有多种实现方式,以下是几种常见的方法:

  1. 使用 Thread.sleep()(最常用)

java

try {

// 延迟3秒(3000毫秒)

Thread.sleep(3000);

} catch (InterruptedException e) {

// 处理中断异常

Thread.currentThread().interrupt();

e.printStackTrace();

}

  1. 使用 TimeUnit(推荐)

java

import java.util.concurrent.TimeUnit;

try {

// 更易读的方式,支持多种时间单位

TimeUnit.SECONDS.sleep(3);

// 或者

TimeUnit.MILLISECONDS.sleep(3000);

} catch (InterruptedException e) {

Thread.currentThread().interrupt();

e.printStackTrace();

}

  1. 使用 ScheduledExecutorService(适合定时任务)

java

import java.util.concurrent.Executors;

import java.util.concurrent.ScheduledExecutorService;

import java.util.concurrent.TimeUnit;

ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);

// 延迟3秒后执行任务

scheduler.schedule(() -> {

System.out.println("延迟3秒后执行的任务");

}, 3, TimeUnit.SECONDS);

// 记得关闭线程池

scheduler.shutdown();

  1. 使用 CompletableFuture(异步延迟)

java

import java.util.concurrent.CompletableFuture;

import java.util.concurrent.TimeUnit;

CompletableFuture.delayedExecutor(3, TimeUnit.SECONDS)

.execute(() -> {

System.out.println("延迟3秒后异步执行");

});

  1. 封装成工具方法

java

public class DelayUtil {

public static void delaySeconds(int seconds) {

try {

TimeUnit.SECONDS.sleep(seconds);

} catch (InterruptedException e) {

Thread.currentThread().interrupt();

throw new RuntimeException("延迟被中断", e);

}

}

public static void delayMilliseconds(long milliseconds) {

try {

TimeUnit.MILLISECONDS.sleep(milliseconds);

} catch (InterruptedException e) {

Thread.currentThread().interrupt();

throw new RuntimeException("延迟被中断", e);

}

}

}

// 使用示例

DelayUtil.delaySeconds(3); // 延迟3秒

完整示例

java

public class DelayExample {

public static void main(String[] args) {

System.out.println("程序开始: " + System.currentTimeMillis());

try {

// 延迟3秒

TimeUnit.SECONDS.sleep(3);

} catch (InterruptedException e) {

Thread.currentThread().interrupt();

e.printStackTrace();

}

System.out.println("3秒后: " + System.currentTimeMillis());

}

}

注意事项

异常处理:Thread.sleep() 会抛出 InterruptedException,必须处理

精度问题:睡眠时间不是绝对精确的,实际延迟可能略有偏差

线程阻塞:sleep方法会阻塞当前线程,在UI线程中使用会导致界面卡顿

单位转换:推荐使用 TimeUnit,代码更清晰易读

推荐使用 TimeUnit.SECONDS.sleep(3),因为它比 Thread.sleep(3000) 更易读和维护。

相关推荐
南棱笑笑生14 天前
20250912在荣品RD-RK3588-MID开发板的Android13系统下在接电脑的时候禁止充电
电脑·rockchip
南棱笑笑生16 天前
20250910在荣品RD-RK3588-MID开发板的Android13系统下修改短按power按键的休眠/唤醒为关闭/打开背光
开发语言·python·rockchip
Milton4 个月前
玩客云 OEC/OECT 笔记
rk3566·rockchip
zanglengyu4 个月前
RK3568解码1080P视频时遇到系统崩溃内核挂掉的解决方案
linux·音视频·rockchip
小武~4 个月前
ARMV8 RK3399 u-boot TPL启动流程分析 --crt0.S
linux·u-boot·rockchip·arm-v8·tpl
小武~5 个月前
ARMV8 RK3399 u-boot TPL启动流程分析 --start.S
linux·rk3399·u-boot·rockchip
__Witheart__7 个月前
RK Android11 WiFi模组 AIC8800 驱动移植流程
android·wifi·3568·rockchip·aic8800
Leon_Chenl8 个月前
瑞芯微 RK 系列 RK3588 使用 ffmpeg-rockchip 实现 MPP 视频硬件编解码-代码版
ffmpeg·音视频·rockchip·瑞芯微·ffmpeg-rochchip·硬件编解码
ArmSoM9 个月前
ArmSoM RK3588/RK3576核心板,开发板网络设置
rk3588·树莓派·开源硬件·rockchip·rk3576