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 terlebih dahulu atau memulai perekaman sambil menonton suatu program. Setelah sistem menyimpan rekaman, pengguna bisa mencari, mengelola, dan memutar kembali rekaman menggunakan aplikasi TV yang ada pada sistem.

Jika ingin menyediakan fungsionalitas perekaman untuk layanan input TV, tunjukkan kepada sistem bahwa aplikasi Anda mendukung perekaman, implementasikan kemampuan untuk merekam program, tangani dan komunikasikan masalah yang terjadi saat perekaman, serta kelola sesi yang direkam.

Menunjukkan dukungan untuk perekaman

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

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

Untuk 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. Di 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 mengenali dukungan untuk fungsionalitas perekaman, sistem akan memanggil metode TvInputService.onCreateRecordingSession jika perlu mengakses implementasi perekaman aplikasi. Implementasikan subclass TvInputService.RecordingSession Anda sendiri dan tampilkan saat callback onCreateRecordingSession diaktifkan. Subclass ini bertanggung jawab untuk beralih ke data saluran yang benar, merekam data yang diminta, dan mengomunikasikan status dan error perekaman ke sistem.

Jika 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 dipilih dengan memanggil notifyTuned atau, jika aplikasi Anda tidak dapat disetel ke saluran yang tepat, panggil notifyError.

Sistem selanjutnya memanggil callback RecordingSession.onStartRecording. Aplikasi Anda harus segera mulai merekam. Saat memanggil callback ini, sistem mungkin 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 Anda harus segera berhenti merekam. Anda juga perlu membuat entri di RecordedPrograms tabel yang menyertakan URI data sesi yang direkam di RecordedPrograms.COLUMN_RECORDING_DATA_URI kolom, dan informasi program apa pun yang diberikan sistem dalam panggilan awal ke onStartRecording.

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

Menangani error perekaman

Jika terjadi error saat merekam yang mengakibatkan data terekam 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 saat merekam, tetapi Anda ingin memberikan rekaman sebagian kepada pengguna untuk pemutaran, panggil notifyRecordingStopped agar sistem dapat menggunakan sesi parsial.

Mengelola rekaman sesi

Sistem menyimpan informasi untuk semua rekaman sesi dari semua aplikasi saluran dengan dukungan perekaman 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 informasi selengkapnya tentang cara menggunakan 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 rekaman sesi. Gunakan RecordingCallback.onError(RECORDING_ERROR_INSUFFICIENT_SPACE) jika tidak ada cukup ruang untuk menyimpan rekaman sesi.

Saat pengguna memulai perekaman, segera mulai merekam data. Agar lebih mudah, selesaikan terlebih dahulu setiap tugas yang memakan waktu lama, seperti mengakses dan mengalokasikan ruang penyimpanan, saat sistem memanggil callback onCreateRecordingSession. Dengan begitu, Anda dapat segera mulai merekam saat callback onStartRecording diaktifkan.