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:
- Di layanan input TV Anda,
onCreate()
, buat objekTvInputInfo
baru menggunakan metode ClassTvInputInfo.Builder
. - Saat membuat objek
TvInputInfo
baru, panggilsetCanRecord(true)
sebelum meneleponbuild()
untuk menunjukkan bahwa yang mendukung perekaman. - Daftarkan objek
TvInputInfo
Anda ke sistem dengan memanggilTvInputManager.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.