Dịch vụ đầu vào TV cho phép người dùng tạm dừng và tiếp tục phát kênh bằng API dịch chuyển thời gian. Android 7.0 mở rộng tính năng dịch chuyển thời gian bằng cách cho phép người dùng lưu nhiều phiên được ghi lại.
Người dùng có thể lên lịch trước cho các bản ghi hoặc bắt đầu ghi khi xem một chương trình. Sau khi hệ thống lưu một bản ghi âm, người dùng có thể duyệt qua, quản lý và phát lại bản ghi bằng ứng dụng TV hệ thống.
Nếu bạn muốn cung cấp chức năng ghi cho dịch vụ đầu vào TV, bạn phải cho hệ thống biết rằng ứng dụng của bạn hỗ trợ tính năng ghi, triển khai khả năng ghi chương trình, xử lý và truyền đạt mọi lỗi xảy ra trong khi ghi hình, và quản lý các phiên đã ghi.
Cho biết tính năng hỗ trợ ghi âm
Để cho hệ thống biết rằng dịch vụ đầu vào TV của bạn hỗ trợ tính năng ghi, hãy đặt
thuộc tính android:canRecord
trong tệp XML siêu dữ liệu của dịch vụ
đến true
:
<tv-input xmlns:android="http://schemas.android.com/apk/res/android" android:canRecord="true" android:setupActivity="com.example.sampletvinput.SampleTvInputSetupActivity" />
Để biết thêm thông tin về tệp siêu dữ liệu dịch vụ, hãy xem Khai báo đầu vào TV trong tệp kê khai.
Ngoài ra, bạn có thể cho biết khả năng hỗ trợ ghi âm trong mã bằng cách sử dụng các bước sau:
- Trong dịch vụ đầu vào TV
onCreate()
hãy tạo một đối tượngTvInputInfo
mới bằng cách sử dụng phương thứcTvInputInfo.Builder
. - Khi tạo đối tượng
TvInputInfo
mới, hãy gọisetCanRecord(true)
trước khi gọibuild()
để cho biết rằng Dịch vụ hỗ trợ ghi âm. - Đăng ký đối tượng
TvInputInfo
với hệ thống bằng cách gọiTvInputManager.updateTvInputInfo()
Ghi lại một phiên
Sau khi dịch vụ đầu vào TV của bạn đăng ký rằng dịch vụ đó hỗ trợ tính năng ghi
chức năng, hệ thống sẽ gọi
Phương thức TvInputService.onCreateRecordingSession()
khi cần truy cập
cho việc triển khai bản ghi của ứng dụng. Triển khai chiến dịch của riêng bạn
Lớp con TvInputService.RecordingSession
và trả về lớp con đó
khi lệnh gọi lại onCreateRecordingSession()
kích hoạt. Lớp con này chịu trách nhiệm
để chuyển sang đúng dữ liệu kênh, ghi lại dữ liệu được yêu cầu,
cũng như truyền đạt thông tin về trạng thái ghi và lỗi cho hệ thống.
Khi hệ thống gọi
RecordingSession.onTune()
, truyền vào một URI kênh, điều chỉnh đến kênh
mà URI chỉ định. Thông báo cho hệ thống rằng ứng dụng của bạn đã điều chỉnh theo
bằng cách gọi
notifyTuned()
hoặc nếu ứng dụng của bạn không thể dò kênh phù hợp, hãy gọi
notifyError()
Tiếp theo, hệ thống sẽ gọi
Lệnh gọi lại RecordingSession.onStartRecording()
. Ứng dụng của bạn phải bắt đầu ghi
ngay lập tức. Khi gọi lại lệnh gọi lại này, hệ thống có thể cung cấp URI
chứa thông tin về chương trình sắp được ghi hình.
Khi quá trình ghi hoàn tất, hãy sao chép dữ liệu này vào
RecordedPrograms
bảng dữ liệu.
Cuối cùng, hệ thống gọi
RecordingSession.onStopRecording()
. Tại thời điểm này, ứng dụng của bạn phải ngừng
ngay lập tức. Bạn cũng cần tạo một mục nhập trong
RecordedPrograms
bao gồm URI dữ liệu phiên được ghi lại trong
cột RecordedPrograms.COLUMN_RECORDING_DATA_URI
và bất kỳ chương trình nào
thông tin mà hệ thống đã cung cấp trong lệnh gọi ban đầu
onStartRecording()
.
Để biết thêm chi tiết về cách truy cập vào
Bảng RecordedPrograms
,
xem phần Quản lý các phiên đã ghi.
Xử lý lỗi ghi
Nếu xảy ra lỗi trong quá trình ghi, dẫn đến dữ liệu đã ghi không sử dụng được,
thông báo cho hệ thống bằng cách gọi
notifyError()
.
Bạn cũng có thể gọi
notifyError()
sau khi tạo phiên ghi để cho hệ thống biết
rằng ứng dụng của bạn không thể ghi lại các phiên đó nữa.
Nếu xảy ra lỗi trong quá trình ghi nhưng bạn muốn cung cấp thông tin
ghi một phần cho người dùng để phát lại, gọi
notifyRecordingStopped()
để cho phép hệ thống
hãy sử dụng phiên hoạt động không trọn vẹn.
Quản lý các phiên đã ghi lại
Hệ thống lưu giữ thông tin cho tất cả các phiên được ghi lại từ tất cả
các ứng dụng kênh có khả năng ghi trong
RecordedPrograms
bảng trình cung cấp nội dung. Thông tin này có thể truy cập được qua
RecordedPrograms
URI ghi nội dung. Sử dụng API trình cung cấp nội dung để
đọc, thêm và xoá các mục nhập khỏi bảng này.
Để biết thêm thông tin về cách làm việc với dữ liệu của trình cung cấp nội dung, hãy xem Thông tin cơ bản về trình cung cấp nội dung.
Các phương pháp hay nhất
Các thiết bị TV có thể có bộ nhớ hạn chế, vì vậy, hãy suy xét thật kỹ lưỡng khi
phân bổ bộ nhớ để lưu các phiên đã ghi. Sử dụng
RecordingCallback.onError(RECORDING_ERROR_INSUFFICIENT_SPACE)
khi
không đủ dung lượng để lưu phiên được ghi lại.
Khi người dùng bắt đầu ghi, hãy bắt đầu ghi dữ liệu ngay khi người dùng bắt đầu ghi
nhất có thể. Để hỗ trợ việc này, hãy hoàn tất mọi công việc tốn nhiều thời gian,
chẳng hạn như truy cập và phân bổ dung lượng lưu trữ, khi hệ thống gọi
Lệnh gọi lại onCreateRecordingSession()
. Làm như vậy sẽ giúp bạn bắt đầu
ngay lập tức khi
Lệnh gọi lại onStartRecording()
kích hoạt.