שירותי קלט לטלוויזיה מאפשרים למשתמש להשהות את ההפעלה של הערוץ ולחדש אותה באמצעות ממשקי API של הזזת זמן. ב-Android 7.0, אפשרות ההזזה בזמן הורחבה כך שהמשתמש יכול לשמור כמה סשנים מוקלטים.
המשתמשים יכולים לתזמן הקלטות מראש או להתחיל הקלטה בזמן הצפייה בתוכנית. אחרי שהמערכת שומרת הקלטה, המשתמש יכול לעיין בהקלטה, לנהל אותה ולהפעיל אותה מחדש באמצעות אפליקציית הטלוויזיה של המערכת.
אם רוצים לספק פונקציונליות של הקלטה לשירות קלט הטלוויזיה, צריך לציין למערכת שהאפליקציה תומכת בהקלטה, להטמיע את האפשרות להקליט תוכניות, לטפל בשגיאות שמתרחשות במהלך ההקלטה ולדווח עליהן, ולנהל את ההפעלות המוקלטות.
אינדיקציה לתמיכה בהקלטה
כדי לציין למערכת ששירות קלט הטלוויזיה שלכם תומך בהקלטה, צריך להגדיר את המאפיין android:canRecord בקובץ ה-XML של המטא-נתונים של השירות לערך true:
<tv-input xmlns:android="http://schemas.android.com/apk/res/android" android:canRecord="true" android:setupActivity="com.example.sampletvinput.SampleTvInputSetupActivity" />
מידע נוסף על קובץ המטא-נתונים של השירות זמין במאמר בנושא הצהרה על שירות קלט לטלוויזיה בקובץ המניפסט.
אפשר גם לציין בקוד שיש תמיכה בהקלטה באמצעות השלבים הבאים:
- בשיטה
onCreateשל שירות קלט הטלוויזיה, יוצרים אובייקטTvInputInfoחדש באמצעות המחלקהTvInputInfo.Builder. - כשיוצרים את אובייקט
TvInputInfoהחדש, קוראים ל-setCanRecord(true)לפני שקוראים ל-buildכדי לציין שהשירות תומך בהקלטה. - רושמים את אובייקט
TvInputInfoבמערכת על ידי קריאה ל-TvInputManager.updateTvInputInfo.
הקלטת מפגש
אחרי ששירות קלט הטלוויזיה נרשם כתומך בפונקציונליות של הקלטה, המערכת קוראת לשיטה TvInputService.onCreateRecordingSession כשצריך לגשת להטמעה של ההקלטה באפליקציה. מטמיעים מחלקת משנה (subclass) משלכם TvInputService.RecordingSession ומחזירים אותה onCreateRecordingSession כשהקריאה החוזרת (callback) מופעלת. המחלקת המשנית הזו אחראית למעבר לנתוני הערוץ הנכונים, לתיעוד הנתונים המבוקשים ולדיווח על סטטוס ההקלטה ושגיאות למערכת.
כשהמערכת קוראת ל-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. המידע הזה נגיש דרך
RecordedPrograms
כתובות ה-URI של הקלטות התוכן. אפשר להשתמש בממשקי API של ספקי תוכן כדי לקרוא, להוסיף ולמחוק רשומות מהטבלה הזו.
מידע נוסף על עבודה עם נתונים של ספקי תוכן זמין במאמר יסודות בנושא ספקי תוכן.
שיטות מומלצות
יכול להיות שנפח האחסון במכשירי טלוויזיה מוגבל, לכן כדאי להשתמש בשיקול דעת כשמקצים נפח אחסון לשמירת סשנים מוקלטים. משתמשים ב-RecordingCallback.onError(RECORDING_ERROR_INSUFFICIENT_SPACE) כשאין מספיק מקום כדי לשמור את ההקלטה של הפגישה.
כשהמשתמש מתחיל הקלטה, צריך להתחיל להקליט נתונים בהקדם האפשרי. כדי לעשות זאת, צריך להשלים מראש משימות שגוזלות זמן, כמו גישה לנפח אחסון והקצאת נפח אחסון, כשהמערכת מפעילה את הקריאה החוזרת onCreateRecordingSession. כך תוכלו להתחיל להקליט מיד כשמופעל ה-callback onStartRecording.