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 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, tetapkan
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:
- Di metode
onCreate()
layanan input TV Anda, buat objekTvInputInfo
baru menggunakan classTvInputInfo.Builder
. - Saat membuat objek
TvInputInfo
baru, panggilsetCanRecord(true)
sebelum memanggilbuild()
untuk menunjukkan bahwa layanan Anda mendukung perekaman. - Daftarkan objek
TvInputInfo
Anda pada sistem dengan memanggilTvInputManager.updateTvInputInfo()
.
Merekam sesi
Setelah layanan input TV Anda mendaftarkan bahwa fungsi tersebut mendukung fungsionalitas perekaman, sistem akan memanggil metode TvInputService.onCreateRecordingSession()
Anda saat metode tersebut perlu mengakses implementasi perekaman aplikasi Anda. Implementasikan subclass TvInputService.RecordingSession
Anda sendiri, lalu kembalikan jika callback onCreateRecordingSession()
dipicu. Subclass ini berfungsi untuk
mengalihkan ke data saluran yang benar, merekam data yang diminta,
serta memberitahukan status perekaman dan error 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 diinginkan dengan memanggil notifyTuned()
, atau, jika aplikasi Anda tidak bisa disetel ke saluran yang tepat, panggil notifyError()
.
Sistem berikutnya akan memanggil callback RecordingSession.onStartRecording()
. Aplikasi Anda harus segera mulai
merekam. Ketika memanggil callback ini, sistem dapat menyediakan URI
yang berisi informasi tentang program yang akan direkam.
Setelah perekaman selesai, Anda akan menyalin data ini ke RecordedPrograms
tabel data.
Terakhir, sistem akan memanggil RecordingSession.onStopRecording()
. Pada tahap ini, aplikasi Anda harus
segera menghentikan perekaman. Anda juga perlu membuat entri dalam tabel RecordedPrograms
. Entri ini harus menyertakan URI data sesi yang direkam dalam kolom RecordedPrograms.COLUMN_RECORDING_DATA_URI
, dan informasi program yang diberikan sistem dalam panggilan awal ke onStartRecording()
.
Untuk detail selengkapnya tentang cara mengakses tabel RecordedPrograms
, lihat 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()
. Demikian juga, Anda dapat memanggil notifyError()
setelah sesi perekaman dibuat agar sistem mengetahui bahwa aplikasi Anda tidak dapat merekam sesi lagi.
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 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 materi untuk membaca, menambahkan, dan menghapus entri dari tabel ini.
Untuk informasi selengkapnya tentang cara menggunakan data penyedia konten, lihat Dasar-dasar penyedia konten.
Tips
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 cukup ruang untuk menyimpan sesi rekaman.
Ketika pengguna memulai perekaman, Anda harus memulai perekaman data
secepatnya. Agar lebih mudah, selesaikan terlebih dahulu setiap tugas yang memakan waktu lama, seperti mengakses dan mengalokasikan ruang penyimpanan, saat sistem memanggil callback onCreateRecordingSession()
. Langkah ini akan memungkinkan Anda memulai perekaman dengan segera jika callback onStartRecording()
dipicu.