บริการอินพุตทีวีช่วยให้ผู้ใช้หยุดชั่วคราวและเล่นช่องต่อได้โดยใช้ API การเลื่อนเวลา Android 7.0 ขยายความสามารถในการเลื่อนเวลาโดยอนุญาตให้ผู้ใช้บันทึกเซสชันที่บันทึกไว้หลายรายการ
ผู้ใช้สามารถกำหนดเวลาการบันทึกล่วงหน้าหรือเริ่มการบันทึกขณะดูรายการ เมื่อระบบบันทึกแล้ว ผู้ใช้จะเรียกดู จัดการ และเล่นการบันทึกได้โดยใช้แอป 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 ของคุณเองและแสดงผลเมื่อมีการเรียกใช้ onCreateRecordingSession คลาสย่อยนี้มีหน้าที่เปลี่ยนไปใช้ข้อมูลช่องที่ถูกต้อง บันทึกข้อมูลที่ขอ และแจ้งสถานะการบันทึกและข้อผิดพลาดไปยังระบบ
เมื่อระบบเรียกใช้ RecordingSession.onTune โดยส่ง URI ของช่อง ให้ปรับไปที่ช่องที่ URI ระบุ แจ้งให้ระบบทราบว่าแอปของคุณปรับไปที่ช่องที่เลือกแล้วโดยเรียกใช้ notifyTuned หรือหากแอปปรับไปที่ช่องที่เหมาะสมไม่ได้ ให้เรียกใช้ notifyError
จากนั้นระบบจะเรียกใช้ RecordingSession.onStartRecording แอปของคุณต้องเริ่มการบันทึกทันที เมื่อระบบเรียกใช้การเรียกกลับนี้ ระบบอาจระบุ URI ที่มีข้อมูลเกี่ยวกับรายการที่จะบันทึก
เมื่อการบันทึกเสร็จแล้ว ให้คัดลอกข้อมูลนี้ไปยังตารางข้อมูล RecordedPrograms
สุดท้าย ระบบจะเรียกใช้ RecordingSession.onStopRecording ณ จุดนี้ แอปของคุณต้องหยุดการบันทึกทันที นอกจากนี้ คุณยังต้องสร้างรายการในตาราง
RecordedPrograms
ซึ่งรวมถึง URI ของข้อมูลเซสชันที่บันทึกไว้ในคอลัมน์
RecordedPrograms.COLUMN_RECORDING_DATA_URIและข้อมูลรายการ
ที่ระบบระบุในการเรียกใช้
onStartRecordingครั้งแรก
ดูรายละเอียดเพิ่มเติมเกี่ยวกับวิธีเข้าถึงตาราง
RecordedPrograms ได้ในส่วนจัดการเซสชันที่บันทึกไว้
จัดการข้อผิดพลาดในการบันทึก
หากเกิดข้อผิดพลาดระหว่างการบันทึกซึ่งส่งผลให้ข้อมูลที่บันทึกไว้ใช้ไม่ได้ ให้แจ้งให้ระบบทราบโดยเรียกใช้ notifyError
นอกจากนี้ คุณยังเรียกใช้ notifyError หลังจากสร้างเซสชันการบันทึกแล้วเพื่อแจ้งให้ระบบทราบว่าแอปของคุณไม่สามารถบันทึกเซสชันได้อีกต่อไป
หากเกิดข้อผิดพลาดระหว่างการบันทึก แต่คุณต้องการให้ผู้ใช้เล่นการบันทึกบางส่วนได้ ให้เรียกใช้ notifyRecordingStopped เพื่อให้ระบบใช้เซสชันบางส่วนได้
จัดการเซสชันที่บันทึกไว้
ระบบจะเก็บข้อมูลสำหรับเซสชันที่บันทึกไว้ทั้งหมดจากแอปช่องทั้งหมดที่สามารถบันทึกได้ในตารางผู้ให้บริการเนื้อหา RecordedPrograms คุณเข้าถึงข้อมูลนี้ได้ผ่าน URI การบันทึกเนื้อหา RecordedPrograms ใช้ API ผู้ให้บริการเนื้อหาเพื่ออ่าน เพิ่ม และลบรายการจากตารางนี้
ดูข้อมูลเพิ่มเติมเกี่ยวกับการทำงานกับข้อมูลผู้ให้บริการเนื้อหาได้ที่ ข้อมูลเบื้องต้นเกี่ยวกับผู้ให้บริการเนื้อหา
แนวทางปฏิบัติแนะนำ
อุปกรณ์ทีวีอาจมีพื้นที่เก็บข้อมูลจำกัด ดังนั้นให้ใช้ดุลยพินิจที่ดีที่สุดเมื่อจัดสรรพื้นที่เก็บข้อมูลเพื่อบันทึกเซสชัน ใช้ RecordingCallback.onError(RECORDING_ERROR_INSUFFICIENT_SPACE) เมื่อมีพื้นที่ไม่เพียงพอที่จะบันทึกเซสชัน
เมื่อผู้ใช้เริ่มการบันทึก ให้เริ่มบันทึกข้อมูลโดยเร็วที่สุด เพื่อให้ทำเช่นนี้ได้ ให้ทำภารกิจที่ใช้เวลานานล่วงหน้า เช่น การเข้าถึงและจัดสรรพื้นที่เก็บข้อมูล เมื่อระบบเรียกใช้การเรียกกลับ onCreateRecordingSession การทำเช่นนี้จะช่วยให้คุณเริ่มการบันทึกได้ทันทีเมื่อมีการเรียกใช้ onStartRecording