Mendukung perekaman konten

Layanan input TV memungkinkan pengguna menjeda dan melanjutkan pemutaran saluran menggunakan API pergeseran waktu. Android 7.0 memperluas kemampuan pergeseran waktu dengan memungkinkan pengguna menyimpan beberapa rekaman sesi.

Pengguna dapat menjadwalkan perekaman di awal atau memulai perekaman sambil menonton program. Setelah sistem menyimpan rekaman, pengguna dapat menjelajahi, mengelola, dan memutar kembali rekaman menggunakan aplikasi TV sistem.

Jika ingin menyediakan fungsi perekaman untuk layanan input TV, Anda harus menunjukkan kepada sistem bahwa aplikasi Anda mendukung perekaman, mengimplementasikan kemampuan merekam program, menangani dan mengomunikasikan error yang terjadi selama perekaman, serta mengelola sesi yang direkam.

Menunjukkan dukungan untuk perekaman

Untuk memberi tahu sistem bahwa layanan input TV Anda mendukung perekaman, tetapkan atribut android:canRecord di file XML metadata layanan ke true:

<tv-input xmlns:android="http://schemas.android.com/apk/res/android"
  android:canRecord="true"
  android:setupActivity="com.example.sampletvinput.SampleTvInputSetupActivity" />

Untuk mengetahui informasi selengkapnya tentang file metadata layanan, lihat Mendeklarasikan layanan input TV dalam manifes.

Atau, Anda dapat menunjukkan dukungan perekaman dalam kode menggunakan langkah-langkah berikut:

  1. Dalam metode onCreate() layanan input TV Anda, buat objek TvInputInfo baru menggunakan class TvInputInfo.Builder.
  2. Saat membuat objek TvInputInfo baru, panggil setCanRecord(true) sebelum memanggil build() untuk menunjukkan bahwa layanan Anda mendukung perekaman.
  3. Daftarkan objek TvInputInfo Anda ke sistem dengan memanggil TvInputManager.updateTvInputInfo().

Merekam sesi

Setelah layanan input TV Anda mendaftarkan bahwa layanan tersebut mendukung fungsi perekaman, sistem akan memanggil metode TvInputService.onCreateRecordingSession() saat perlu mengakses implementasi perekaman aplikasi Anda. Terapkan subclass TvInputService.RecordingSession Anda sendiri, lalu tampilkan saat callback onCreateRecordingSession() diaktifkan. Subclass ini bertanggung jawab untuk beralih ke data saluran yang benar, merekam data yang diminta, serta memberitahukan status perekaman dan error ke sistem.

Saat sistem memanggil RecordingSession.onTune(), dengan meneruskan URI saluran, setel ke saluran yang ditetapkan URI. Beri tahu sistem bahwa aplikasi Anda telah disetel ke saluran yang diinginkan dengan memanggil notifyTuned() atau, jika aplikasi Anda tidak dapat melakukan penyesuaian ke saluran yang tepat, panggil notifyError().

Selanjutnya, sistem akan memanggil callback RecordingSession.onStartRecording(). Aplikasi Anda harus segera mulai merekam. Ketika memanggil callback ini, sistem mungkin akan memberikan URI yang berisi informasi tentang program yang akan direkam. Setelah perekaman selesai, salin data ini ke tabel data RecordedPrograms.

Terakhir, sistem akan memanggil RecordingSession.onStopRecording(). Pada tahap ini, aplikasi harus segera berhenti merekam. Anda juga harus membuat entri dalam tabel RecordedPrograms yang menyertakan URI data sesi yang direkam di kolom RecordedPrograms.COLUMN_RECORDING_DATA_URI, dan informasi program apa pun yang diberikan sistem dalam panggilan awal ke onStartRecording().

Untuk detail selengkapnya tentang cara mengakses tabel RecordedPrograms, lihat bagian Mengelola sesi yang direkam.

Menangani error perekaman

Jika terjadi error selama perekaman yang mengakibatkan rekaman data tidak dapat digunakan, beri tahu sistem dengan memanggil notifyError(). Anda juga dapat memanggil notifyError() setelah sesi perekaman dibuat untuk memberi tahu sistem bahwa aplikasi Anda tidak dapat lagi merekam sesi.

Jika terjadi error selama perekaman, tetapi Anda ingin menyediakan rekaman sebagian kepada pengguna untuk pemutaran, panggil notifyRecordingStopped() agar sistem dapat menggunakan sesi parsial.

Mengelola rekaman sesi

Sistem menyimpan informasi untuk semua sesi yang direkam dari semua aplikasi saluran yang mampu merekam dalam tabel penyedia konten RecordedPrograms. Informasi ini dapat diakses melalui URI perekaman konten RecordedPrograms. Gunakan API penyedia konten untuk membaca, menambahkan, dan menghapus entri dari tabel ini.

Untuk mengetahui informasi selengkapnya tentang cara menangani data penyedia konten, lihat Dasar-dasar penyedia konten.

Praktik terbaik

Perangkat TV mungkin memiliki penyimpanan terbatas, jadi pertimbangkan sebaik mungkin saat mengalokasikan penyimpanan untuk menyimpan sesi rekaman. Gunakan RecordingCallback.onError(RECORDING_ERROR_INSUFFICIENT_SPACE) saat tidak cukup ruang untuk menyimpan sesi yang direkam.

Saat pengguna memulai perekaman, mulailah merekam data sesegera mungkin. Untuk memfasilitasi hal ini, selesaikan setiap tugas yang memakan waktu di awal, seperti mengakses dan mengalokasikan ruang penyimpanan, saat sistem memanggil callback onCreateRecordingSession(). Dengan begitu, Anda dapat segera memulai perekaman saat callback onStartRecording() diaktifkan.