บริการอินพุตทีวีช่วยให้ผู้ใช้หยุดเล่นช่องชั่วคราวและเล่นต่อได้โดยใช้ API ที่เปลี่ยนเวลา Android 7.0 พัฒนาขึ้นจากการบันทึกรายการเอาไว้รับชมในภายหลัง โดยการให้ผู้ใช้บันทึกเซสชันที่บันทึกไว้หลายรายการ
ผู้ใช้สามารถกำหนดเวลาบันทึกล่วงหน้าหรือเริ่มการบันทึกขณะรับชมได้ โปรแกรม เมื่อระบบบันทึกการอัดเสียงแล้ว ผู้ใช้สามารถเรียกดู จัดการ และเล่นการบันทึกโดยใช้แอป System TV
หากคุณต้องการมอบฟังก์ชันการบันทึกสำหรับบริการอินพุตทีวี คุณต้องระบุให้ระบบทราบว่าแอปของคุณรองรับการบันทึก ใช้ ความสามารถในการบันทึกรายการ จัดการและสื่อสารข้อผิดพลาดที่เกิดขึ้น ในระหว่างการบันทึก และจัดการเซสชันที่บันทึกไว้
ระบุการรองรับการบันทึก
หากต้องการบอกระบบว่าบริการอินพุตทีวีของคุณรองรับการบันทึก ให้ตั้งค่า
แอตทริบิวต์ android:canRecord
ในไฟล์ XML ข้อมูลเมตาของบริการ
ถึง true
:
<tv-input xmlns:android="http://schemas.android.com/apk/res/android" android:canRecord="true" android:setupActivity="com.example.sampletvinput.SampleTvInputSetupActivity" />
ดูข้อมูลเพิ่มเติมเกี่ยวกับไฟล์ข้อมูลเมตาของบริการได้ที่ ประกาศอินพุตทีวีของคุณ ในไฟล์ Manifest
หรือจะระบุการสนับสนุนการบันทึกในโค้ดโดยใช้ ขั้นตอนเหล่านี้:
- ในบริการอินพุตทีวี
onCreate()
ให้สร้างออบเจ็กต์TvInputInfo
ใหม่โดยใช้TvInputInfo.Builder
ชั้นเรียน - เมื่อสร้างออบเจ็กต์
TvInputInfo
ใหม่ ให้เรียกsetCanRecord(true)
ก่อนโทรbuild()
เพื่อระบุว่า บริการรองรับการบันทึก - ลงทะเบียนออบเจ็กต์
TvInputInfo
กับระบบโดยการเรียกใช้TvInputManager.updateTvInputInfo()
บันทึกเซสชัน
หลังจากลงทะเบียนบริการอินพุตทีวีว่ารองรับการบันทึกแล้ว
ระบบจะเรียกฟังก์ชัน
TvInputService.onCreateRecordingSession()
วิธีเมื่อต้องการเข้าถึง
การใช้การบันทึกของแอปคุณ ติดตั้งใช้งานด้วยตนเอง
ชั้นเรียนย่อย TvInputService.RecordingSession
รายการและส่งคืน
เมื่อ Callback onCreateRecordingSession()
เริ่มทำงาน คลาสย่อยนี้มีหน้าที่
เพื่อเปลี่ยนเป็นข้อมูลช่องที่ถูกต้อง บันทึกข้อมูลที่ขอ
รวมทั้งแจ้งสถานะการบันทึกและข้อผิดพลาดไปยังระบบ
เมื่อระบบเรียก
RecordingSession.onTune()
ส่งผ่าน URI ของช่อง ปรับไปที่ช่อง
ที่ URI กำหนด แจ้งระบบว่าแอปของคุณได้ปรับเป็น
ช่องทางที่ต้องการด้วยการโทร
notifyTuned()
หรือหากแอปของคุณไม่สามารถปรับไปยังช่องที่เหมาะสมได้ โปรดโทร
notifyError()
ต่อมาระบบจะเรียกใช้
การติดต่อกลับของ RecordingSession.onStartRecording()
แอปต้องเริ่มบันทึก
ทันที เมื่อระบบเรียกใช้ Callback นี้ ระบบอาจระบุ URI
ที่มีข้อมูลเกี่ยวกับโปรแกรมที่กำลังจะบันทึก
เมื่อบันทึกเสร็จแล้ว ให้คัดลอกข้อมูลนี้ไปยัง
RecordedPrograms
ด้วย
สุดท้าย ระบบเรียก
RecordingSession.onStopRecording()
ณ จุดนี้ แอปของคุณต้องหยุด
ทันที นอกจากนี้คุณต้องสร้างรายการใน
RecordedPrograms
ตารางที่มี URI ข้อมูลเซสชันที่บันทึกไว้ใน
RecordedPrograms.COLUMN_RECORDING_DATA_URI
และโปรแกรมใดก็ได้
ข้อมูลที่ระบบให้ในการโทรครั้งแรก
onStartRecording()
สําหรับรายละเอียดเพิ่มเติมเกี่ยวกับวิธีเข้าถึง
ตาราง RecordedPrograms
โปรดดูส่วนจัดการเซสชันที่บันทึกไว้
จัดการข้อผิดพลาดในการบันทึก
หากเกิดข้อผิดพลาดระหว่างการบันทึก ซึ่งส่งผลให้ไม่สามารถใช้ข้อมูลที่บันทึกไว้ได้
แจ้งให้ระบบทราบโดยการโทร
notifyError()
หรือจะโทรหา
notifyError()
หลังจากสร้างเซสชันการบันทึกเพื่อแจ้งให้ระบบทราบ
ที่แอปของคุณไม่สามารถบันทึกเซสชันได้อีกต่อไป
หากเกิดข้อผิดพลาดระหว่างการบันทึก แต่คุณต้องการส่ง
การบันทึกบางส่วนให้กับผู้ใช้เพื่อเล่น โทร
notifyRecordingStopped()
เพื่อให้ระบบดำเนินการ
ให้ใช้เซสชันบางส่วน
จัดการเซสชันที่บันทึกไว้
ระบบจะเก็บรักษาข้อมูลของเซสชันที่บันทึกไว้ทั้งหมดจาก
แอปช่องที่ สามารถบันทึกใน
RecordedPrograms
Content Provider ข้อมูลนี้เข้าถึงได้ผ่านทาง
RecordedPrograms
URI การบันทึกเนื้อหา ใช้ API ผู้ให้บริการเนื้อหาเพื่อ
อ่าน เพิ่ม และลบรายการจากตารางนี้
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการทำงานกับข้อมูลผู้ให้บริการเนื้อหา โปรดดู ข้อมูลเบื้องต้นเกี่ยวกับผู้ให้บริการเนื้อหา
แนวทางปฏิบัติแนะนำ
อุปกรณ์ทีวีอาจมีพื้นที่เก็บข้อมูลจำกัด ดังนั้นโปรดใช้วิจารณญาณเมื่อ
กำลังจัดสรรพื้นที่เก็บข้อมูลเพื่อบันทึกเซสชันที่บันทึกไว้ ใช้
RecordingCallback.onError(RECORDING_ERROR_INSUFFICIENT_SPACE)
เมื่อ
มีพื้นที่ว่างไม่เพียงพอที่จะบันทึกเซสชันที่บันทึกไว้
เมื่อผู้ใช้เริ่มการบันทึก ให้เริ่มบันทึกข้อมูลทันที
ให้มากที่สุด เพื่ออำนวยความสะดวกในเรื่องนี้ ให้ดำเนินงานที่ต้องใช้เวลาล่วงหน้าให้เสร็จ
เช่น การเข้าถึงและจัดสรรพื้นที่เก็บข้อมูล เมื่อระบบเรียก
การติดต่อกลับของ onCreateRecordingSession()
เมื่อทำเช่นนั้น คุณจะสามารถเริ่ม
ทันทีเมื่อ
Callback onStartRecording()
เริ่มทำงาน