Android16 SystemUI 屏幕录制功能优化
2026-07-04 / 龙之叶   

1. 概述

针对 Android SystemUI 中的屏幕录制(Screen Record)功能进行了两项行为优化:

  1. 默认录制范围:将屏幕录制权限弹窗的默认选中项从「单个应用」改为「整个屏幕」。
  2. 锁屏续录:修改系统属性默认值,使屏幕录制在用户锁屏后不会自动停止。

这两项改动提升了屏幕录制的易用性,减少了用户每次录制时的额外操作,并满足在锁屏场景下持续录制的业务需求。


2. 修改背景与需求

2.1 问题描述

序号 修改前行为 用户影响
1 打开屏幕录制时,默认选中「单个应用」模式 大多数用户实际需要录制全屏内容,每次需手动切换选项
2 用户锁屏或息屏后,录制自动停止 无法在锁屏后继续录制,影响特定场景(如后台演示、长时间录制)

2.2 优化目标

  • 降低屏幕录制的操作门槛,默认即满足最常见的全屏录制需求。
  • 锁屏不中断录制,提升录制连续性与灵活性。
  • 保持通过系统属性可配置的能力,便于后续按需回退或定制。

3. 修改内容详解

3.1 修改文件清单

1
2
3
frameworks/base/packages/SystemUI/src/com/android/systemui/screenrecord/
├── RecordingService.java
└── ScreenRecordPermissionDialogDelegate.kt

3.2 变更一:默认录制模式改为「整个屏幕」

文件frameworks/base/packages/SystemUI/src/com/android/systemui/screenrecord/ScreenRecordPermissionDialogDelegate.kt

修改说明

  • 新增 ENTIRE_SCREEN 常量导入。
  • defaultSelectedMode 参数从 SINGLE_APP 改为 ENTIRE_SCREEN

代码对比

1
2
3
4
5
6
+import com.android.systemui.mediaprojection.permission.ENTIRE_SCREEN

- defaultSelectedMode = SINGLE_APP,
+ // Create by yeruilai 2026-1-14 11:18:02 Modify the default setting to record the entire screen
+ // defaultSelectedMode = SINGLE_APP,
+ defaultSelectedMode = ENTIRE_SCREEN,

技术原理

ScreenRecordPermissionDialogDelegate 继承自 BaseMediaProjectionPermissionDialogDelegate,在创建屏幕录制权限弹窗时,defaultSelectedMode 决定了单选列表的初始选中项。可选模式包括:

常量 含义
SINGLE_APP 录制单个应用
ENTIRE_SCREEN 录制整个屏幕

修改后,用户打开屏幕录制入口时,弹窗将默认高亮「整个屏幕」选项,用户可直接点击「开始」而无需额外切换。

3.3 变更二:锁屏不停止录制

文件frameworks/base/packages/SystemUI/src/com/android/systemui/screenrecord/RecordingService.java

修改说明

  • 将系统属性 sysui.screenrecord.screenoff.enable 的默认值从 false 改为 true

代码对比

1
2
3
4
-        boolean enableScreenoff = SystemProperties.getBoolean("sysui.screenrecord.screenoff.enable", false);
+ // Create by yeruilai 2026-1-14 11:18:02 Recording is still possible after the screen is turned off
+ // boolean enableScreenoff = SystemProperties.getBoolean("sysui.screenrecord.screenoff.enable", false);
+ boolean enableScreenoff = SystemProperties.getBoolean("sysui.screenrecord.screenoff.enable", true);

技术原理

RecordingService 在启动时会根据 enableScreenoff 决定是否注册锁屏/息屏相关的广播监听:

1
2
3
4
5
6
7
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(Intent.ACTION_SHUTDOWN);
if (!enableScreenoff) {
// 注册锁屏、息屏等广播,触发后停止录制
intentFilter.addAction(Intent.ACTION_SCREEN_OFF);
// ...
}
enableScreenoff 行为
false(修改前默认) 注册 ACTION_SCREEN_OFF 等广播,锁屏/息屏时停止录制
true(修改后默认) 不注册锁屏相关广播,录制在锁屏后继续

注意ACTION_SHUTDOWN(关机/重启)的广播监听仍然保留,关机或重启时录制仍会正常停止,符合预期安全行为。


4. 效果对比

4.1 默认录制模式

动态对比(GIF)

默认录制模式修改前后对比

静态对比

修改前 修改后
修改前:默认选中单个应用 修改后:默认选中整个屏幕
弹窗默认选中「单个应用」 弹窗默认选中「整个屏幕」

4.2 锁屏录制行为

动态对比(GIF)

锁屏录制行为修改前后对比

静态对比

修改前 修改后
修改前:锁屏后录制停止 修改后:锁屏后录制继续
锁屏后录制指示器消失,录制停止 锁屏后录制指示器保持,录制继续

4.3 锁屏行为流程图

锁屏录制行为流程对比


5. 系统属性配置

如需在运行时覆盖默认行为,可通过 adb 设置系统属性:

1
2
3
4
5
# 启用锁屏续录(与 Patch 修改后默认行为一致)
adb shell setprop sysui.screenrecord.screenoff.enable true

# 恢复锁屏停止录制(修改前默认行为)
adb shell setprop sysui.screenrecord.screenoff.enable false

属性修改后需重启 SystemUI 或重新发起录制方可生效:

1
adb shell killall com.android.systemui
本文链接:
http://longzhiye.top/2026/07/04/2026-07-04/