בתרשים הבא מוצגים הרכיבים שמקיימים אינטראקציה עם Media:
איור 1. רכיבי המערכת
האלמנטים בתרשים הזה מתוארים בטבלה:
רכיב | תיאור |
---|---|
מסך הבית | מייצג פלטפורמות אחרות בממשק המשתמש ברכב שבהן מוצגת המדיה שמופעלת כרגע, ודרכן אפשר לשלוט בה. ב-AOSP, זהו המסך הראשי שמוצג כשהמערכת מופעלת. במסך הזה, המשתמשים יכולים לראות פרטים על פריט המדיה שמוצג ולבצע קבוצה מוגבלת של פעולות רגילות ומותאמות אישית (לדוגמה, הפעלה והשהיה). |
ממשק המשתמש של המערכת | הרכיב מספק פונקציונליות שכוללת אפשרויות ניווט גלובליות בממשק המשתמש, כמו ניווט אל 'מדיה'. |
עוזרים | מערכת Android מספקת מנגנונים לאפליקציות שונות של עוזרות קוליות כדי ליצור אינטראקציה עם המערכת. האפליקציות האלה יכולות לקיים אינטראקציה עם מקורות מדיה ברקע (לדוגמה, הפעלת שיר כתוצאה מפקודה קולית) או לנווט למדיה בחזית (לדוגמה, כשאפליקציית עוזרת קולית מקבלת הוראה להציג את ממשק המשתמש של מקור מדיה ספציפי). |
מרכז האפליקציות | כל האפליקציות ל-Android מתחילות ב-App Launcher, כולל מקורות המדיה. ל-Media יכול להיות בורר משלו של מקורות מדיה, שיוסיף ל-App Launcher או יחליף אותו כמקום ההתחלה של המדיה. |
חנות Google Play | כשמשתמשים ב-GAS, כאן המשתמשים מאתרים ומתקינים אפליקציות חדשות במכשיר Android. במדיה, אחרי שהאפליקציות מותקנות, המשתמשים מועברים למדיה כדי להשלים את תהליך הכניסה או כדי להתחיל אינטראקציה עם האפליקציה. |
Media Session Manager | שירות מערכת של Android שמנטר סשנים של מדיה ומכל מקורות המדיה, ומאפשר לשלוט בהם. הוא מספק מנגנונים לזיהוי מתי מקור מדיה הופך למקור המדיה בחזית. אפליקציית 'מדיה' וכל האפליקציות האחרות שמוצג בהן מקור המדיה שמתנגן כרגע (לדוגמה, מסך הבית) משתמשות ב-Media Session Manager כדי לזהות את האירועים האלה ולעדכן את ממשק המשתמש בהתאם. מקורות המדיה מקיימים אינטראקציה עם מנהל סשן המדיה באמצעות Media Session API. |
רדיו | אפליקציה ייעודית ליצירת אינטראקציה עם חומרת הרדיו. התכונה 'רדיו' מחפשת תחנות רדיו, בוחרת במהירות תחנות שזוהו לאחרונה ומעבירה בין תחנות רדיו. רכיבי ממשק המשתמש המשותפים לרדיו ולמדיה מאפשרים למשתמש לעבור בין שתי חוויות השימוש. |
Driver Distraction Engine | שירות מערכת של Android המשמש להטלת הגבלות על חוויית המשתמש על סמך מצב הנהיגה ברכב. בממשק המשתמש של כניסה והגדרות של מקורות המדיה (שבהם המסך נשלט ישירות על ידי מקורות המדיה), השירות הזה מוודא שלא מוצג תוכן לא בטוח כשהמכונית נמצאת במצב נהיגה. יצרני ציוד מקורי יכולים להתאים אישית את ההגדרה של המצבים האלה ואת התגובה של המערכת במצבים האלה (למשל, הצגת שכבת-על של מסך חסימה). |
מסלולי המשתמש באפליקציה
השקת אפליקציית מדיה
התהליך שמפעיל את Media מופיע בהמשך.
איור 2. השקת אפליקציית מדיה
כדי להפעיל את המדיה, צריך להשתמש ב-CAR_INTENT_ACTION_MEDIA_TEMPLATE
המובלט הבא.
כפרטים נוספים, אפשר לכלול את הפרטים הבאים בכוונה הזו:
-
android.car.intent.extra.MEDIA_COMPONENT
(אופציונלי). מחרוזת נוספת שמייצגת את שם הרכיב המשופר שלMediaBrowserService
באפליקציית המדיה שאליה המדיה אמורה להתחבר. אם לא מציינים את הערך, המערכת תציג את אפליקציית המדיה שנבחרה כרגע. המערכת משתמשת בכוונה הזו בנקודות הכניסה הבאות:-
ממשק המשתמש של המערכת. משמשת כדי לחזור לממשק המדיה או להתחיל להשתמש בו בפעם הראשונה. במקרה כזה, ייעשה שימוש ב-Intent שלמעלה ללא רכיבים נוספים כדי לגרום ל-Media להציג את אפליקציית המדיה שנבחרה כרגע.
-
מסך הבית, עוזרות ו'מרכז ההתראות'. המשתמשים יכולים לנווט אל 'מדיה' כדי להציג את אפליקציית המדיה שנבחרה כרגע. בכל המקרים, המערכת תפעיל את הכוונה המשתמעת ללא רכיבים נוספים.
-
מרכז האפליקציות כשמשתמשים בוחרים אפליקציית מדיה ממרכז האפליקציות, הכוונה שלמעלה כוללת את התוסף
CAR_EXTRA_MEDIA_COMPONENT
שמכיל את אפליקציית המדיה שנבחרה. מערכת המדיה מסמנת אותה כאפליקציה שנבחרה לאחרונה ומתחבר אליה. פרטים נוספים זמינים בקטע 'שילוב של מרכז האפליקציות עם מדיה' שבהמשך.
-
מרכז האפליקציות לשילוב מדיה
אפליקציות מדיה לא רשאיות לספק פעילות שמסומנת בקטגוריה android.intent.category.LAUNCHER
. כתוצאה מכך, מרכז האפליקציות (או המקבילה שלו) צריך ליישם לוגיקה מיוחדת כדי לטפל בשילוב של מקורות המדיה:
-
מרכז האפליקציות צריך לסרוק את המערכת כדי לאתר חבילות שמטמיעות את
MediaBrowserService.SERVICE_INTERFACE
. בחבילות האלה, מרכז האפליקציות מאחזר את סמל השירות באופן דומה לאופן שבו הוא מאחזר פעילויות אחרות. -
לאחר מכן, מרכז האפליקציות משלב את החבילות האלה עם חבילות שמטמיעות פעילויות
android.intent.category.LAUNCHER
. אם אפליקציה מספקת הטמעה שלMediaBrowserService
ופעילות במרכז האפליקציות, השירות מקבל עדיפות.נכון למועד כתיבת שורות אלה, אף אפליקציה של מקור מדיה לא יכולה לספק פעילות במרכז האפליקציות.
- דוגמה ללוגיקת הבדיקה הזו מופיעה בקוד של AOSP בכתובת
AppLauncherUtils#getAllLauncherApps()
.
תהליך הכניסה לחשבון ואפשרויות ההגדרה
אפליקציות מדיה יכולות לכלול פעילות של הגדרות שמותאמת לרכב. אפשר להשתמש בפעילות כזו כדי להטמיע תהליכי שימוש שלא מטופלים על ידי Android Media APIs, לדוגמה:
- כניסה
- יציאה מהחשבון
- מעבר בין חשבונות
- המסך שאליו המשתמש מחובר כרגע (אם יש כזה)
- הגדרת השירות
איור 3. תהליך הכניסה
פעילות ההגדרות הזו מוצהרת על ידי אפליקציית המדיה באמצעות מסנן ה-Intent הבא:
<activity android:name=".AppSettingsActivity" android:exported="true android:theme="@style/SettingsActivity" android:label="@string/app_settings_activity_title"> <intent-filter> <action android:name="android.intent.action.APPLICATION_PREFERENCES"/> </intent-filter> </activity>
המדיה חייבת ליישם את הלוגיקה הבאה:
-
בודקים שאפליקציית המדיה שנבחרה כרגע כוללת פעילות עם מסנן ה-Intent הנתון.
-
אם כן, מאפשרים למשתמש לנווט לפעילות.
-
אם ההגבלות על חוויית המשתמש ברכב בתוקף (לדוגמה, הרכב בתנועה), צריך להשבית את האפשרות הזו כי פעילות ההגדרות היא לא ממשק משתמש מותאם לנהג.
טיפול בשגיאות וכניסה נדרשת
המדיה יוצרת אינטראקציה עם אפליקציות המדיה דרך Android Media Session API. כחלק מ-API הזה, Media מקבל אובייקט PlaybackState
שמציג את המצב הנוכחי של אפליקציית המדיה.
תהליך הכניסה מתחיל כשאפליקציית המדיה משתנה מ-PlaybackState
ל-STATE_ERROR
, כולל קוד שגיאה ספציפי (פרטים בהמשך). במקרה כזה, ב-Media יוצג תיאור השגיאה והאפשרות לנווט לפעילות כניסה שהופעלה על ידי אפליקציית המדיה.
אפליקציות יכולות להשתמש באותו תהליך כדי לסמן מצבים אחרים של שגיאות (לדוגמה, שגיאה בחיבור לשרת).
איור 4. טיפול בשגיאות
כחלק מהטיפול הרגיל בשגיאות PlaybackState
, המערכת של Media צריכה לבדוק את הקלט הבא.
-
קוד השגיאה
PlaybackState
שווה ל-PlaybackStateCompat#ERROR_CODE_AUTHENTICATION_EXPIRED
. המשמעות היא שאפליקציית המדיה מחייבת כניסה כדי להמשיך לפעול. יכול להיות שתקבלו קודי שגיאה אחרים, שיצוינו בהם סוגים אחרים של מצבי שגיאה. -
הודעת השגיאה
PlaybackState
(שמוגדרת על ידי אפליקציות מדיה באמצעות השיטהPlaybackStateCompat.Builder#setErrorMessage
) מכילה הסבר שאפשר לקרוא (לדוגמה, 'לא נכנסת לחשבון'). ההודעה הזו חייבת להופיע למשתמש, והיא חייבת להיות מותאמת למניעת הסחות דעת בזמן נהיגה (DO). -
אפשר גם לכלול ב-
PlaybackState
את התוספים הבאים (שמוגדרים על ידי אפליקציות מדיה באמצעות השיטהPlaybackStateCompat.Builder#setExtras
) באמצעות המפתחות הבאים.-
android.media.extras.ERROR_RESOLUTION_ACTION_LABEL
. מגדירים מחרוזת שמכילה את ההודעה שאנשים יכולים לקרוא, שתוצג על הלחצן שהמשתמש מגע בו כדי להתחיל את תהליך הכניסה. -
android.media.extras.ERROR_RESOLUTION_ACTION_INTENT
. מגדירים באמצעותPendingIntent
כדי שהאירוע יופעל כשהמשתמש לוחץ על הלחצן שצוין למעלה. השדהPendingIntent
מפנה לפעילות כניסה מותאמת אישית שמופעלת על ידי אותה אפליקציית מדיה.
-
-
המצב של
PlaybackState
שווה ל-STATE_ERROR
. המשמעות היא שלא ניתן לבצע פעולה אחרת עד שהכניסה לחשבון תושלם.