Снимок: 2026-10-11. Секция хаба Tools, тайл «Запись» / «Rec», подпись «Запись экрана: качество, звук, касания и управление агентом». Доступен всегда.
Экран и навигация
Screen.ScreenRecord→ScreenRecordScreen(485 строк).- Переход в редактор:
onOpenEditor→Screen.VideoEditor(см. Видеоредактор).
Возможности (подробно)
Запуск записи
requestStart()— запрос разрешения MediaProjection (системный диалог Android),launchProjection(config)— запуск сервиса,beginCountdown— обратный отсчёт перед стартом (отменяемый),toggleRecording()— стоп/старт.- Предполётная проверка
recordPreflight(context, config)→RecordPreflight(canStart, text): проверяет разрешения, свободное место (MIN_START_FREE_BYTES= 512 МБ), батарею (battery_it_is_better_to_connect_power), настройку «показывать касания» в Android, доступ к микрофону.
Параметры записи (ScreenRecordConfig)
| Параметр | Значения | Где в UI |
|---|---|---|
| Качество/битрейт | МПб/с (media_kb, media_mbps, media_bitrate) | ScreenRecordSettingsCard |
| Разрешение/размер | (media_size, media_px_s) | там же |
| Частота кадров | (media_frames_1) | там же |
| Звук | ScreenRecordAudioMode: системный (media_system), микрофон (media_microphone), оба (media_both), без звука (media_no_sound) | audioLabel(mode) |
| Показывать касания | глобальная настройка Android (show_touches) | чекбокс с подсказкой про «Параметры разработчика» |
| Источник приложения | RecordAppCard — можно писать «приложение остаётся включённым» | карточка |
Системный звук работает с Android 10+ и может не записывать страницы с FLAG_SECURE (media_that_disallows_playback_capture_flag_secure).
Статус и статистика
ScreenRecordStatusCard — идёт ли запись, таймер (formatDuration), размер (formatSize), начало (formatTime), оценка места (media_recording_estimate, media_free), кнопки стоп/пауза.
История записей (ScreenRecordHistory.kt)
ScreenRecordingsCard — список прошлых записей: открыть (media_open), поделиться (media_share), скопировать путь (media_copy_path), удалить (media_delete_recording, файлы удаляются из Download), открыть в видеоредакторе (media_open_video_editor).
Запуск агентом
Экран зарегистрирован как промпт-триггер RECORD_PROMPT = "y83@record" — агент может отправить этот триггер, чтобы начать запись.
Где в коде
| Файл | Строк | Роль |
|---|---|---|
ui/record/ScreenRecordScreen.kt | 485 | Экран, preflight, запуск/стоп, отсчёт |
ui/record/ScreenRecordControls.kt | 359 | Карточки статуса, настроек, приложения, плитки метрик |
ui/record/ScreenRecordHistory.kt | 188 | История записей |
bridge/ScreenRecordService.kt | — | Foreground-сервис записи |
bridge/ScreenRecorder.kt | — | Низкоуровневая запись (MediaCodec) |
bridge/ScreenRecordConfig.kt | — | Конфиг записи, ScreenRecordAudioMode |
bridge/ScreenRecordings.kt | — | Список файлов записей |
bridge/ScreenAudioCapture.kt | — | Захват системного звука |
Данные и API
- Файлы: публичная папка
Download(показываетScreenRecordings). - Настройки записи —
data/ScreenRecordSettings. - Персист —
SharedPreferences. - Backend-эндпоинтов нет: запись идёт полностью на устройстве.
- Мост:
bridge.BridgeState.
Агент
Команды моста
| Команда | Действие |
|---|---|
app_record_start | Начать запись (параметры конфигурации) |
app_record_status | Статус: идёт ли, сколько секунд |
app_record_stop | Остановить |
app_screen_capture | Снимок экрана (не запись) |
app_screenshot | Нормализованный снимок экрана |
app_video_status | Статус рендера видеоредактора |
Агент может начать и остановить запись без участия пользователя (в пределах разрешений MediaProjection, уже выданных ранее).
Подводные камни
- MediaProjection требует системного диалога. Без согласия пользователя запись не стартует;
recordPreflightпредупреждает заранее. - Свободное место < 512 МБ — запись не стартует.
- FLAG_SECURE. Страницы/приложения с защищённым окном не пишутся, даже если остальное записывается (
video_saved_but_audio_was_interruptedи т.п.). - Системный звук только с Android 10.
- Показ касаний — глобальная настройка Android, а не флаг приложения; экран подсказывает, куда идти.
- Запись продолжается, даже если открыть Y83 Code — статус виден на уведомлении сервиса.
Как обновлять
- Каталог:
data/InstrumentCatalog.kt(idrecord). - Маршрут:
ui/navigation/Screen.kt(Screen.ScreenRecord). - Код UI:
ui/record/*. - Сервис:
bridge/ScreenRecordService.kt,ScreenRecorder.kt,ScreenRecordConfig.kt,ScreenAudioCapture.kt. - Мост:
app_record_*вbridge/BridgeAppHandlers.kt.