blob: afedf8f31b214d1ec1e4601c931b8a8c48ba0013 [file] [log] [blame]
page.title=Perekaman TV
page.keywords=pratinjau,sdk,tv,perekaman
page.tags=androidn
page.image=images/cards/card-nyc_2x.jpg
@jd:body
<div id="qv-wrapper">
<div id="qv">
<h2>Dalam dokumen ini</h2>
<ol>
<li><a href="#supporting">Menunjukkan Dukungan untuk Perekaman</a></li>
<li><a href="#recording">Merekam Sesi</a></li>
<li><a href="#errors">Menangani Kesalahan Perekaman</a></li>
<li><a href="#sessions">Mengelola Sesi yang Direkam</a></li>
<li><a href="#best">Praktik Terbaik</a></li>
</ol>
</div>
</div>
<p>Layanan masukan TV memungkinkan pengguna menghentikan sementara dan melanjutkan pemutaran saluran melalui
API perekaman. Android N telah berkembang hingga ke perekaman
dengan memungkinkan pengguna menyimpan beberapa sesi rekaman.</p>
<p>Pengguna bisa menjadwalkan rekaman terlebih dahulu, atau memulai rekaman sambil menonton
suatu acara. Setelah sistem menyimpan rekaman, pengguna bisa menjelajah, menata,
dan memutar kembali rekaman tersebut menggunakan aplikasi TV di sistem.</p>
<p>Jika Anda ingin menyediakan fungsi perekaman untuk layanan masukan TV,
Anda harus menunjukkan pada sistem bahwa aplikasi Anda mendukung perekaman, mengimplementasikan
kemampuan merekam program, menangani dan mengomunikasikan kesalahan yang muncul
selama perekaman, dan mengelola sesi perekaman Anda.</p>
<p class="note"><strong>Catatan:</strong> Aplikasi Live Channels belum
menyediakan cara bagi pengguna untuk membuat atau mengakses perekaman. Hingga dibuat perubahan
di aplikasi Live Channels, mungkin sulit menguji sepenuhnya pengalaman
perekaman untuk layanan masukan TV Anda.</p>
<h2 id="supporting">Menunjukkan Dukungan untuk Perekaman</h2>
<p>Untuk memberi tahu sistem bahwa layanan masukan TV Anda mendukung perekaman, setel
atribut <code>android:canRecord</code> di file XML metadata layanan Anda
ke <code>true</code>:
</p>
<pre>
&lt;tv-input xmlns:android="http://schemas.android.com/apk/res/android"
<b>android:canRecord="true"</b>
android:setupActivity="com.example.sampletvinput.SampleTvInputSetupActivity" /&gt;
</pre>
<p>Untuk informasi selengkapnya mengenai layanan file metadata, lihat
<a href="{@docRoot}training/tv/tif/tvinput.html#manifest">Mendeklarasikan Layanan Masukan TV Anda
di Manifes</a>.
</p>
<p>Atau, Anda bisa menunjukkan dukungan perekaman dalam kode Anda menggunakan
langkah-langkah ini:</p>
<ol>
<li>Dalam metode <code>TvInputService.onCreate()</code> Anda, buat objek
<code>TvInputInfo</code> baru menggunakan kelas <code>TvInputInfo.Builder</code>.
</li>
<li>Saat membuat objek <code>TvInputInfo</code> baru, panggil
<code>setCanRecord(true)</code> sebelum memanggil <code>build()</code> untuk
menunjukkan layanan Anda mendukung perekaman.</li>
<li>Daftarkan objek <code>TvInputInfo</code> Anda pada sistem dengan memanggil
<code>TvInputManager.updateTvInputInfo()</code>.</li>
</ol>
<h2 id="recording">Merekam Sesi</h2>
<p>Setelah layanan masukan TV Anda mendaftar bahwa mendukung fungsionalitas
perekaman, sistem akan memanggil
<code>TvInputService.onCreateRecordingSession()</code> bila perlu untuk mengakses
implementasi perekaman aplikasi Anda. Implementasikan subkelas
<code>TvInputService.RecordingSession</code> Anda sendiri dan kembalikan
bila callback <code>onCreateRecordingSession()</code> dipicu.
Subkelas ini bertanggung jawab mengalihkan ke saluran data yang benar,
merekam data yang diminta, dan memberitahukan status perekaman serta kesalahan ke
sistem.</p>
<p>Bila sistem memanggil <code>RecordingSession.onTune()</code>, dengan meneruskan
URI saluran, setel ke saluran yang ditetapkan URI. Beri tahu sistem bahwa
aplikasi Anda telah disetel ke saluran yang diinginkan dengan memanggil <code>notifyTuned()</code>,
atau, jika aplikasi Anda tidak bisa disetel ke saluran yang tepat, panggil
<code>notifyError()</code>.</p>
<p>Sistem berikutnya akan memanggil callback <code>RecordingSession.onStartRecording()</code>.
Aplikasi Anda harus segera mulai merekam. Bila sistem memanggil
callback ini, sistem mungkin akan memberikan URI yang berisi informasi tentang program
yang akan direkam. Bila perekaman selesai, Anda perlu menyalin data
ini ke tabel data <code>RecordedPrograms</code>.</p>
<p>Terakhir, sistem akan memanggil <code>RecordingSession.onStopRecording()</code>.
Pada tahap ini, aplikasi Anda harus segera berhenti merekam. Anda juga perlu
membuat entri dalam tabel <code>RecordedPrograms</code>. Entri ini harus
menyertakan URI data sesi yang direkam dalam kolom
<code>RecordedPrograms.COLUMN_RECORDING_DATA_URI</code>, dan informasi
program yang diberikan sistem dalam panggilan awal ke
<code>onStartRecording()</code>.</p>
<p>Untuk detail selengkapnya tentang cara mengakses tabel <code>RecordedPrograms</code>
lihat <a href="#sessions">Mengelola Sesi yang Direkam</a>.</p>
<h2 id="errors">Menangani Kesalahan Perekaman</h2>
<p>Jika terjadi kesalahan selama perekaman, yang menghasilkan data terekam yang tidak bisa digunakan,
beri tahu sistem dengan memanggil <code>RecordingSession.notifyError()</code>.
Begitu juga, Anda bisa memanggil <code>notifyError()</code> setelah sesi rekaman dibuat
agar sistem mengetahui bahwa aplikasi Anda tidak bisa lagi merekam sesi.</p>
<p>Jika terjadi kesalahan selama perekaman, namun Anda ingin menyediakan rekaman parsial
yang bisa digunakan pengguna untuk pemutaran, panggil
<code>RecordingSession.notifyRecordingStopped()</code> untuk memungkinkan sistem
menggunakan sesi parsial.</p>
<h2 id="sessions">Mengelola Sesi yang Direkam</h2>
<p>Sistem menyimpan informasi untuk semua sesi yang direkam dari semua
aplikasi saluran yang mampu merekam dalam tabel penyedia materi <code>TvContract.RecordedPrograms</code>.
Informasi ini bisa diakses lewat URI materi
<code>RecordedPrograms.Uri</code>. Gunakan API penyedia materi untuk
membaca, menambahkan, dan menghapus entri dari tabel ini.</p>
<p>Untuk informasi selengkapnya tentang menangani data penyedia materi, lihat
<a href="{@docRoot}guide/topics/providers/content-provider-basics.html">
Dasar-Dasar Penyedia Materi</a>.</p>
<h2 id="best">Praktik Terbaik</h2>
<p>Perangkat TV mungkin memiliki penyimpanan terbatas, jadi pertimbangkan sebaik mungkin saat
mengalokasikan penyimpanan untuk menyimpan sesi rekaman. Gunakan
<code>RecordingCallback.onError(RECORDING_ERROR_INSUFFICIENT_SPACE)</code> bila
tidak cukup ruang untuk menyimpan sesi rekaman.</p>
<p>Bila pengguna memulai perekaman, Anda harus memulai perekaman data
secepatnya. Untuk memfasilitasinya, selesaikan setiap tugas yang memakan waktu di awal,
seperti mengakses dan mengalokasikan ruang penyimpanan, saat sistem memanggil callback
<code>onCreateRecordingSession()</code>. Hal ini akan memungkinkan Anda memulai
perekaman dengan segera bila callback <code>onStartRecording()</code>
dipicu.</p>