Mendukung perekaman konten

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

Pengguna bisa 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 dalam 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 bisa menunjukkan dukungan perekaman dalam kode menggunakan langkah-langkah berikut:

  1. Dalam metode onCreate() layanan input TV, buat objek TvInputInfo baru menggunakan class TvInputInfo.Builder.
  2. Saat membuat objek TvInputInfo baru, panggil setCanRecord(true) sebelum memanggil build() untuk menunjukkan layanan Anda mendukung perekaman.
  3. Daftarkan objek TvInputInfo pada 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. Terapkan subclass TvInputService.RecordingSession Anda sendiri dan kembalikan ketika callback onCreateRecordingSession() dipicu. Subclass ini bertanggung jawab untuk mengalihkan ke data saluran yang benar, merekam data yang diminta, serta memberitahukan status perekaman dan error ke sistem.

Saat sistem memanggil RecordingSession.onTune(), yang meneruskan URI saluran, setel saluran yang sudah ditentukan URI. Beri tahu sistem bahwa aplikasi Anda sudah menyetel saluran yang diinginkan dengan memanggil notifyTuned(). Jika aplikasi tidak dapat menyetel saluran yang tepat, panggil notifyError().

Sistem kemudian akan memanggil callback RecordingSession.onStartRecording(). Aplikasi Anda harus segera mulai merekam. Ketika memanggil callback ini, sistem bisa menyediakan 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 menghentikan perekaman. Anda juga harus membuat entri dalam tabel RecordedPrograms. Entri ini harus menyertakan URI data sesi yang direkam dalam kolom RecordedPrograms.COLUMN_RECORDING_DATA_URI, dan informasi program apa pun yang diberikan oleh sistem pada panggilan awal ke onStartRecording().

Untuk detail selengkapnya tentang cara mengakses tabel RecordedPrograms, lihat Mengelola rekaman sesi.

Menangani error perekaman

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

Jika terjadi error saat merekam, tetapi Anda ingin menyediakan rekaman parsial yang bisa diputar oleh pengguna, panggil notifyRecordingStopped() agar sistem bisa menggunakan sesi parsial tersebut.

Mengelola rekaman sesi

Sistem menyimpan informasi untuk semua rekaman sesi dari semua aplikasi saluran dengan dukungan perekaman dalam tabel penyedia konten RecordedPrograms. Informasi ini bisa diakses melalui URI perekaman konten RecordedPrograms. Gunakan API penyedia konten untuk membaca, menambahkan, dan menghapus entri dari tabel ini.

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

Tips

Perangkat TV mungkin memiliki penyimpanan terbatas. Pertimbangkan sebaik mungkin saat mengalokasikan penyimpanan untuk menyimpan rekaman sesi. Gunakan RecordingCallback.onError(RECORDING_ERROR_INSUFFICIENT_SPACE) jika ruang untuk menyimpan rekaman sesi tidak mencukupi.

Ketika pengguna memulai perekaman, Anda harus memulai perekaman data secepatnya. Agar lebih mudah, selesaikan setiap tugas yang memerlukan cukup banyak waktu di awal, seperti mengakses dan mengalokasikan ruang penyimpanan saat sistem memanggil callback onCreateRecordingSession(). Hal ini memungkinkan Anda memulai perekaman secara langsung ketika callback onStartRecording() dipicu.