blob: 6dfb53ea3c9a54531e9856bbcc309d6b31262040 [file] [log] [blame]
page.title=Ghi li TV
page.keywords=preview,sdk,tv,recording
page.tags=androidn
page.image=images/cards/card-nyc_2x.jpg
@jd:body
<div id="qv-wrapper">
<div id="qv">
<h2>Trong tài liu này</h2>
<ol>
<li><a href="#supporting">Ch báo H tr ghi li</a></li>
<li><a href="#recording">Ghi li mt chương trình</a></li>
<li><a href="#errors">X lý li ghi li</a></li>
<li><a href="#sessions">Qun lý các chương trình được ghi li</a></li>
<li><a href="#best">Thc hành Tt nht</a></li>
</ol>
</div>
</div>
<p>Các dch v ngun vào TV cho phép người dùng tm dng và tiếp tc phát li kênh thông qua
các API chuyn dch thi gian. Android N m rng thêm chuyn dch thi gian
bng cách cho phép người dùng lưu nhiu chương trình được ghi li.</p>
<p>Người dùng có th to lch ghi li trước hoc tiến hành ghi li khi h xem
mt chương trình. Khi h thng đã lưu bn ghi li, người dùng có th duyt, qun lý
và phát li bn ghi đó bng ng dng TV ca h thng.</p>
<p>Nếu bn mun cung cp tính năng ghi li cho dch v ngun vào TV,
bn phi báo cho h thng biết ng dng ca bn h tr ghi li, trin khai
kh năng ghi chương trình, x lý và thông báo bt k li nào xut hin
trong quá trình ghi li và qun lý các chương trình được ghi li.</p>
<h2 id="supporting">Ch báo H tr ghi li</h2>
<p>Để thông báo cho h thng biết dch v ngun vào TV ca bn h tr ghi li, hãy thc hin
các bước sau:</p>
<ol>
<li>Trong phương thc <code>TvInputService.onCreate()</code> ca bn, hãy to mt đối tượng
<code>TvInputInfo</code> mới sử dụng lớp <code>TvInputInfo.Builder</code>
.</li>
<li>Khi to đối tượng <code>TvInputInfo</code> mi, hãy gi
<code>setCanRecord(true)</code> trước khi gọi <code>build()</code> để
ch báo dch v ca bn h tr ghi li.</li>
<li>Đăng ký đối tượng <code>TvInputInfo</code> vi h thng bng cách gi
<code>TvInputService.updateTvInputInfo()</code>.</li>
</ol>
<h2 id="recording">Ghi li mt chương trình</h2>
<p>Sau khi dch v ngun vào TV ca bn đăng ký để h tr tính năng
ghi li, h thng s gi phương thc
<code>TvInputService.onCreateRecordingSession()</code> ca bn khi cn truy cp
phn trin khai ghi li ca ng dng. Trin khai lp con
<code>TvInputService.RecordingSession</code> ca bn và tr nó v
khi hàm gi li <code>onCreateRecordingSession()</code>
được gi. Lp con này chu trách nhim chuyn sang d liu kênh phù hp,
ghi li d liu được yêu cu và thông báo trng thái ghi li và các li cho
h thng.</p>
<p>Khi h thng gi <code>RecordingSession.onTune()</code>, chuyn vào mt
URI ca kênh, chnh vào kênh mà URI đó ch định. Thông báo cho h thng biết
ng dng ca bn đã chnh vào kênh mong mun bng cách gi <code>notifyTuned()</code>,
hoc nếu ng dng không th chnh vào kênh phù hp, hãy gi
<code>notifyError()</code>.</p>
<p>Tiếp theo h thng s gi hàm gi li <code>RecordingSession.onStartRecording()</code>
. ng dng ca bn phi bt đầu ghi li ngay lp tc. Khi h thng gi
hàm gi li này, h thng có th cung cp mt URI có cha thông tin v chương trình
sp được ghi li. Khi kết thúc vic ghi li, bn cn sao chép d liu
này vào bng d liu <code>RecordedPrograms</code>.</p>
<p>Cui cùng, h thng s gi <code>RecordingSession.onStopRecording()</code>.
Lúc này, ng dng ca bn phi dng ghi li ngay lp tc. Bn cũng cn
to mt mc nhp trong bng <code>RecordedPrograms</code>. Mc này cn
có URI d liu ca chương trình được ghi li trong
ct <code>RecordedPrograms.COLUMN_RECORDING_DATA_URI</code>, và bt k thông tin
v chương trình mà h thng đã cung cp trong ln gi đầu tiên ti
<code>onStartRecording()</code>.</p>
<p>Để biết thêm thông tin v cách truy cp bng <code>RecordedPrograms</code>
hãy xem <a href="#sessions">Qun lý các chương trình được ghi li</a>.</p>
<h2 id="errors">X lý li ghi li</h2>
<p>Nếu xy ra li trong quá trình ghi li, làm cho d liu ghi li không s dng được thì
hãy thông báo cho h thng bng cách gi <code>RecordingSession.notifyError()</code>.
Tương tự, bn có th gi <code>notifyError()</code> sau khi mt chương trình ghi li
được to để cho phép h thng biết được ng dng ca bn không còn tiếp tc ghi các chương trình.</p>
<p>Nếu xy ra li trong quá trình ghi li, nhưng có kh năng là mt phn d liu
ghi li có th được s dng để người dùng phát li thì hãy gi
<code>RecordingSession.notifyRecordingStopped()</code> để cho phép h thng
s dng mt phn chương trình đó.</p>
<h2 id="sessions">Qun lý các chương trình được ghi li</h2>
<p>H thng lưu gi thông tin cho mi chương trình được ghi li t tt c
các ng dng kênh truyn hình h tr ghi li trong bng trình cung cp ni dung<code>TvContract.RecordedPrograms</code>
. Có th truy cp thông tin này qua URI ni dung
<code>RecordedPrograms.Uri</code>. Hãy s dng các API trình cung cp ni dung để
đọc, thêm và xóa các mc trong bng này.</p>
<p>Để biết thêm thông tin v thao tác vi d liu trình cung cp ni dung, hãy xem
<a href="{@docRoot}guide/topics/providers/content-provider-basics.html">
Ni dung Cơ bn v Trình cung cp Ni dung</a>.</p>
<h2 id="best">Thc hành Tt nht</h2>
<p>Các thiết b TV có th có b nh lưu tr hn chế do đó phán đoán hp lý nht khi
phân b b nh lưu tr để lưu các chương trình được ghi li. S dng
<code>RecordingCallback.onError(RECORDING_ERROR_INSUFFICIENT_SPACE)</code> khi
không có đủ dung lượng trng để lưu mt chương trình được ghi li.</p>
<p>Khi người dùng khi to quá trình ghi li, bn cn tiến hành ghi li d liu nhanh nht
có thể. Để h tr công vic này, hãy hoàn thành tt c các tác v tn thi gian trước đó,
như truy cp và phân b không gian lưu tr khi h thng gi hàm gi li
<code>onCreateRecordingSession()</code>. Làm như vy s cho phép bn tiến hành
vic ghi li ngay lp tc khi hàm gi li <code>onStartRecording()</code>
được gi.</p>