| page.title=Запись ТВ |
| page.keywords=preview,sdk,tv,recording |
| page.tags=androidn |
| page.image=images/cards/card-nyc_2x.jpg |
| |
| @jd:body |
| |
| <div id="tb-wrapper"> |
| <div id="tb"> |
| <h2>Содержание документа</h2> |
| <ol> |
| <li><a href="#supporting">Указание на поддержку записи</a></li> |
| <li><a href="#recording">Запись сеанса</a></li> |
| <li><a href="#errors">Обработка ошибок записи</a></li> |
| <li><a href="#sessions">Управление записанными сеансами</a></li> |
| <li><a href="#best">Советы и рекомендации</a></li> |
| </ol> |
| </div> |
| </div> |
| |
| <p>Службы телевидения позволяют пользователю ставить воспроизведение телеканалов на паузу и возобновлять его, используя |
| для этого API-интерфейсы с временным сдвигом. Android N расширяет возможности временного сдвига, |
| позволяя пользователю сохранять несколько записанных сеансов.</p> |
| |
| <p>Пользователи могут планировать запись заранее или начинать ее во время просмотра |
| программы. После сохранения записей в системе пользователь может просматривать их в браузере, управлять ими |
| и воспроизводить их с помощью телевизионного приложения.</p> |
| |
| <p>Если вы хотите добавить функцию записи в службу ТВ, |
| вы должны указать системе, что ваше приложение поддерживает запись, и реализовать |
| возможности записи программ, обработки любых ошибок, возникающих |
| во время записи, вывода сообщений об ошибках, а также управления записанными сеансами.</p> |
| |
| <h2 id="supporting">Указание на поддержку записи</h2> |
| |
| <p>Чтобы сообщить системе, что ваша служба ТВ поддерживает запись, выполните |
| следующие шаги:</p> |
| |
| <ol> |
| <li>В методе <code>TvInputService.onCreate()</code> создайте новый объект |
| <code>TvInputInfo</code>, используя класс <code>TvInputInfo.Builder</code>. |
| </li> |
| <li>При создании нового объекта <code>TvInputInfo</code> вызовите метод |
| <code>setCanRecord(true)</code> до вызова <code>build()</code>, |
| чтобы указать на то, что служба поддерживает запись.</li> |
| <li>Зарегистрируйте объект <code>TvInputInfo</code> в системе посредством вызова метода |
| <code>TvInputService.updateTvInputInfo()</code>.</li> |
| </ol> |
| |
| <h2 id="recording">Запись сеанса</h2> |
| |
| <p>Когда служба ТВ зарегистрирует поддержку записи, |
| система будет вызывать ваш метод |
| <code>TvInputService.onCreateRecordingSession()</code>, когда ей потребуется доступ |
| к функции записи в вашем приложении. Реализуйте собственный подкласс |
| <code>TvInputService.RecordingSession</code> и возвращайте его |
| при получении обратного вызова <code>onCreateRecordingSession()</code>. |
| Этот подкласс отвечает за переключение на данные нужного канала, |
| запись запрошенных данных, а также передачу системе информации о состоянии записи |
| и ошибках.</p> |
| |
| <p>Когда система будет вызывать метод <code>RecordingSession.onTune()</code>, передавая в него |
| URI канала, приложение должно переключаться на канал, указанный URI. Сообщите системе о том, что |
| приложение настроилось на желаемый канал, вызвав метод <code>notifyTuned()</code>. |
| Если приложению не удалось настроиться на желаемый канал, оно должно вызвать метод |
| <code>notifyError()</code>.</p> |
| |
| <p>Затем система передает обратный вызов <code>RecordingSession.onStartRecording()</code>. |
| После этого приложение должно сразу же начать запись. Когда система передает |
| этот обратный вызов, она может указать URI с информацией о программе |
| для записи. После завершения записи эти данные нужно |
| скопировать в таблицу данных <code>RecordedPrograms</code>.</p> |
| |
| <p>Наконец, система вызывает метод <code>RecordingSession.onStopRecording()</code>. |
| В этот момент приложение должно сразу же прекратить запись. Также вам нужно будет |
| создать запись в таблице <code>RecordedPrograms</code>. Эта запись должна |
| содержать URI записанных данных в столбце |
| <code>RecordedPrograms.COLUMN_RECORDING_DATA_URI</code>, а также любую информацию |
| о программе, которая была предоставлена системой в исходном вызове |
| <code>onStartRecording()</code>.</p> |
| |
| <p>Более подробную информацию о доступе к таблице <code>RecordedPrograms</code> |
| можно найти в разделе <a href="#sessions">Управление записанными сеансами</a>.</p> |
| |
| <h2 id="errors">Обработка ошибок записи</h2> |
| |
| <p>Если во время записи возникла ошибка, в результате которой записанные данные стали непригодными для использования, |
| то об этом нужно сообщить системе, вызвав метод <code>RecordingSession.notifyError()</code>. |
| Аналогичным образом, вы можете вызвать метод <code>notifyError()</code> после создания сеанса записи, |
| чтобы сообщить системе, что приложение больше не может записывать сеансы.</p> |
| |
| <p>Если в процессе записи возникла ошибка, но вы хотите предоставить пользователям |
| приемлемую часть записи для воспроизведения, вызовите |
| <code>RecordingSession.notifyRecordingStopped()</code>, чтобы дать системе возможность |
| использовать частичный сеанс.</p> |
| |
| <h2 id="sessions">Управление записанными сеансами</h2> |
| |
| <p>Система хранит информацию обо всех записанных сеансах всех |
| приложений, поддерживающих запись каналов, в таблице поставщиков контента <code>TvContract.RecordedPrograms</code>. |
| Эта информация доступна через URI контента |
| <code>RecordedPrograms.Uri</code>. Используйте API-интерфейсы поставщиков контента для |
| чтения, добавления и удаления записей из этой таблицы.</p> |
| |
| <p>Дополнительную информацию о работе с данными поставщиков контента можно найти в разделе |
| <a href="{@docRoot}guide/topics/providers/content-provider-basics.html"> |
| Основные сведения о поставщике контента</a>.</p> |
| |
| <h2 id="best">Советы и рекомендации</h2> |
| |
| <p>Объем хранилищ на телевизионных устройствах может быть ограничен, поэтому следует разумно |
| распределять доступные хранилища для хранения записанных сеансов. Используйте |
| <code>RecordingCallback.onError(RECORDING_ERROR_INSUFFICIENT_SPACE)</code>, когда для сохранения записанного сеанса |
| недостаточно места.</p> |
| |
| <p>Когда пользователь инициирует запись, приложение должно как можно скорее начать записывать |
| данные. Для этого рекомендуется заранее выполнить все продолжительные задачи, |
| такие как получение доступа к хранилищу и распределение свободного места, когда система передает обратный вызов |
| <code>onCreateRecordingSession()</code>. Это позволяет сразу же начать |
| запись после получения обратного вызова <code>onStartRecording()</code>. |
| </p> |