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 dapat menelusuri, mengelola, dan memutar kembali rekaman menggunakan aplikasi TV yang ada di sistem.

Jika Anda ingin menyediakan fungsi perekaman untuk layanan input TV Anda, Anda harus menunjukkan kepada sistem bahwa aplikasi Anda mendukung perekaman, mengimplementasikan kemampuan untuk merekam program, menangani dan mengkomunikasikan setiap kesalahan yang terjadi selama perekaman, dan mengelola sesi rekaman Anda.

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 input TV di manifes.

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

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

Merekam sesi

Setelah layanan input TV Anda mendaftar bahwa layanan tersebut mendukung perekaman fungsionalitasnya, sistem akan memanggil Metode TvInputService.onCreateRecordingSession() saat perlu mengakses implementasi perekaman aplikasi Anda. Terapkan milik Anda sendiri subclass TvInputService.RecordingSession dan menampilkannya saat callback onCreateRecordingSession() diaktifkan. Subclass ini bertanggung jawab untuk beralih ke data saluran yang benar, mencatat data yang diminta, dan mengkomunikasikan status perekaman dan {i>error<i} ke sistem.

Saat sistem memanggil RecordingSession.onTune(), dengan meneruskan URI saluran, setel ke saluran tersebut yang ditetapkan oleh URI. Beri tahu sistem bahwa aplikasi Anda telah disesuaikan dengan ke saluran yang diinginkan dengan memanggil notifyTuned() atau, jika aplikasi Anda tidak dapat men-tuning saluran yang tepat, panggil notifyError().

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

Akhirnya, sistem memanggil RecordingSession.onStopRecording(). Pada tahap ini, aplikasi Anda harus berhenti langsung merekam. Anda juga perlu membuat entri di RecordedPrograms tabel yang menyertakan URI data sesi yang direkam dalam kolom RecordedPrograms.COLUMN_RECORDING_DATA_URI, dan program apa pun informasi yang disediakan 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 kesalahan saat perekaman yang menyebabkan rekaman data tidak dapat digunakan, memberi 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 kesalahan selama perekaman, tetapi Anda ingin memberikan rekaman parsial kepada pengguna untuk diputar, panggil notifyRecordingStopped() untuk mengaktifkan sistem menggunakan sesi parsial.

Mengelola rekaman sesi

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

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

Praktik terbaik

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

Saat pengguna memulai perekaman, segera mulai perekaman data mungkin. Untuk memfasilitasi hal ini, selesaikan tugas-tugas yang memakan waktu di awal, seperti mengakses dan mengalokasikan ruang penyimpanan, ketika sistem memanggil Callback onCreateRecordingSession(). Dengan melakukannya, Anda dapat memulai langsung merekam saat Callback onStartRecording() diaktifkan.