Сервисы ввода с телевизора позволяют пользователю приостанавливать и возобновлять воспроизведение каналов с помощью API с возможностью сдвига по времени . Android 7.0 расширяет возможности сдвига по времени, позволяя пользователю сохранять несколько записанных сеансов.
Пользователи могут планировать запись заранее или начинать запись во время просмотра программы. После сохранения записи системой пользователь может просматривать, управлять и воспроизводить ее с помощью приложения для телевизора.
Если вы хотите обеспечить функцию записи для вашего сервиса телевизионного ввода, вам необходимо указать системе, что ваше приложение поддерживает запись, реализовать возможность записи программ, обрабатывать и сообщать о любых ошибках, возникающих во время записи, а также управлять записанными сессиями.
Выразите поддержку записи.
Чтобы сообщить системе, что служба ввода с вашего телевизора поддерживает запись, установите атрибут android:canRecord в XML-файле метаданных вашей службы в true :
<tv-input xmlns:android="http://schemas.android.com/apk/res/android" android:canRecord="true" android:setupActivity="com.example.sampletvinput.SampleTvInputSetupActivity" />
Для получения дополнительной информации о файле метаданных службы см. раздел «Указание службы ввода для телевизора в манифесте» .
В качестве альтернативы, вы можете указать поддержку записи в своем коде, выполнив следующие шаги:
- В методе
onCreateвашего сервиса ввода ТВ создайте новый объектTvInputInfo, используя классTvInputInfo.Builder. - При создании нового объекта
TvInputInfoвызовитеsetCanRecord(true)перед вызовомbuild, чтобы указать, что ваша служба поддерживает запись. - Зарегистрируйте объект
TvInputInfoв системе, вызвав методTvInputManager.updateTvInputInfo.
Запись сессии
После того, как ваша служба ввода ТВ зарегистрирует поддержку функции записи, система вызовет метод TvInputService.onCreateRecordingSession , когда ей потребуется доступ к реализации записи вашего приложения. Реализуйте собственный подкласс TvInputService.RecordingSession и возвращайте его при срабатывании обратного вызова onCreateRecordingSession . Этот подкласс отвечает за переключение на нужные данные канала, запись запрошенных данных и передачу системе информации о состоянии записи и ошибках.
Когда система вызывает метод RecordingSession.onTune , передавая URI канала, настройтесь на канал, указанный в URI. Уведомите систему о том, что ваше приложение настроилось на выбранный канал, вызвав метод notifyTuned , или, если ваше приложение не может настроиться на нужный канал, вызовите notifyError .
Затем система вызывает функцию обратного вызова RecordingSession.onStartRecording . Ваше приложение должно немедленно начать запись. При вызове этой функции обратного вызова система может предоставить URI, содержащий информацию о программе, которая будет записана. После завершения записи скопируйте эти данные в таблицу данных RecordedPrograms .
Наконец, система вызывает RecordingSession.onStopRecording . На этом этапе ваше приложение должно немедленно остановить запись. Вам также необходимо создать запись в таблице RecordedPrograms , которая будет содержать URI данных записанной сессии в столбце RecordedPrograms.COLUMN_RECORDING_DATA_URI , а также любую информацию о программе, предоставленную системой при первоначальном вызове метода onStartRecording .
Более подробную информацию о доступе к таблице RecordedPrograms см. в разделе «Управление записанными сессиями» .
Обработка ошибок записи
Если во время записи произошла ошибка, в результате которой записанные данные оказались непригодными для использования, сообщите об этом системе, вызвав notifyError . Вы также можете вызвать notifyError после создания сеанса записи, чтобы сообщить системе, что ваше приложение больше не может записывать сеансы.
Если во время записи произошла ошибка, но вы хотите предоставить пользователям частичную запись для воспроизведения, вызовите notifyRecordingStopped , чтобы разрешить системе использовать частичную сессию.
Управление записанными сессиями
Система хранит информацию обо всех записанных сессиях из всех приложений каналов, поддерживающих запись, в таблице поставщиков контента RecordedPrograms . Эта информация доступна через URI записи контента RecordedPrograms . Используйте API поставщиков контента для чтения, добавления и удаления записей из этой таблицы.
Для получения дополнительной информации о работе с данными поставщика контента см. раздел «Основы работы с поставщиками контента» .
Передовые методы
У телевизионных устройств может быть ограниченный объем памяти, поэтому используйте здравый смысл при выделении места для сохранения записанных сеансов. Используйте RecordingCallback.onError(RECORDING_ERROR_INSUFFICIENT_SPACE) если недостаточно места для сохранения записанного сеанса.
Когда пользователь инициирует запись, начинайте запись данных как можно скорее. Для этого выполните все трудоемкие задачи, такие как доступ к месту хранения и его выделение, когда система вызовет функцию обратного вызова onCreateRecordingSession . Это позволит начать запись немедленно после срабатывания функции обратного вызова onStartRecording .