欢迎光临
我们一直在努力

Android16 SystemUI 屏幕录制功能优化

1. 概述

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

  • 默认录制范围:将屏幕录制权限弹窗的默认选中项从「单个应用」改为「整个屏幕」。
  • 锁屏续录:修改系统属性默认值,使屏幕录制在用户锁屏后不会自动停止。
  • 这两项改动提升了屏幕录制的易用性,减少了用户每次录制时的额外操作,并满足在锁屏场景下持续录制的业务需求。


    2. 修改背景与需求

    2.1 问题描述

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

    2.2 优化目标

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

    3. 修改内容详解

    3.1 修改文件清单

    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。

    代码对比:

    +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。

    代码对比:

    – 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 决定是否注册锁屏/息屏相关的广播监听:

    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 设置系统属性:

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

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

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

    adb shell killall com.android.systemui

    赞(0)
    未经允许不得转载:171主机测评 » Android16 SystemUI 屏幕录制功能优化
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址