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:
- Dalam 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 ke sistem dengan memanggilTvInputManager.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.