הרחבת אפליקציית המדיה ל-Android למכוניות

האפליקציה שלכם יכולה לפעול בכלי רכב עם Android Auto או Android Automotive OS. כדאי להשתמש בארכיטקטורת אפליקציה אחת שמתאימה לשני המקרים, כדי שכל המשתמשים יוכלו ליהנות מהאפליקציה.

מה זה Android לרכבים?

אפליקציית מדיה לרכבים יכולה לספק למשתמשים דרך לחבר בצורה חלקה את החיים הדיגיטליים שלהם לרכבים שלהם. כדי לשפר את חוויית המשתמש, כדאי להרחיב את האפליקציות לטלפון כך שיהיו זמינות גם לרכבים. כדי לעשות את זה, אתם יכולים לשלב את האפליקציה עם Android Auto או עם Android Automotive OS.

אפליקציות ל-Android לרכבים חייבות למנוע הסחת דעת של הנהג לפני הכול. כדי לצמצם את הסחות הדעת, כדאי לפעול לפי השיטות המומלצות, כמו שימוש בפקודות קוליות ועיצוב ויזואלי פרקטי מאוד. כך אפליקציית המדיה יכולה להציג לנהג מידע עדכני רק כשהוא רלוונטי, ולהשתמש בתבניות צפויות למשימות נפוצות.

Android Auto

Android Auto מספקת חוויית שימוש באפליקציה שמותאמת לנהגים שיש להם טלפון Android עם אפליקציית Android Auto ומערכת סטריאו תואמת ברכב או מערכת אפטר מרקט. הם יכולים להשתמש באפליקציה ישירות במסך הרכב על ידי חיבור הטלפון. כדי לאפשר ל-Android Auto להתחבר לאפליקציית הטלפון, צריך ליצור שירותים ש-Android Auto משתמש בהם כדי להציג לנהג ממשק שמותאם לנהיגה.

Android Automotive OS

‫Android Automotive OS היא מערכת מולטימדיה מבוססת-Android שמובנית ברכבים. מערכת הרכב היא מכשיר Android עצמאי שמותאם לנהיגה. ב-Android Automotive OS, המשתמשים מתקינים את האפליקציה ישירות במכונית ולא בטלפון.

קטגוריות נתמכות של אפליקציות

אפליקציות מדיה מאפשרות למשתמשים לעיין במוזיקה, ברדיו, בספרי אודיו ובתוכן אודיו אחר ולהפעיל אותם ברכב. מידע נוסף זמין במאמרים פיתוח אפליקציות להפעלת אודיו לרכבים ופיתוח אפליקציות מדיה לרכבים.

אפליקציות מדיה מפותחות באמצעות MediaLibraryService ו-MediaSession. ב-Android Automotive OS, אתם יכולים גם ליצור מסכי כניסה והגדרות (לשימוש בזמן חנייה) באמצעות Views או Compose.

אפליקציות וידאו מאפשרות למשתמשים לצפות בסרטונים בסטרימינג כשהרכב חונה. המטרה העיקרית של האפליקציות האלה היא להציג סרטונים בסטרימינג. האפליקציות האלה מפותחות באמצעות Views או Compose. מידע נוסף זמין במאמרים פיתוח אפליקציות להפעלת סרטונים ל-Android Automotive OS ופיתוח אפליקציות של סרטונים ל-Android Automotive OS.

פיתוח אפליקציות להפעלת אודיו ברכבים

המדריך הזה מניח שכבר יש לכם אפליקציה בסיסית להפעלת מדיה. אם אין לכם אפליקציה כזו, אתם יכולים להיעזר במאמר יצירת אפליקציה בסיסית של נגן מדיה כדי להתחיל.

במדריך הזה מוסבר מה צריך לעשות, ויש בו קישורים למקורות מידע נוספים עם הנחיות ספציפיות.

רכיבי ההפעלה

‫Media3 מציעה כמה רכיבים מרכזיים לתרחישי שימוש של הפעלה. אם עבדתם עם ספריות מדיה קודמות של Android, אתם מכירים את המחלקות שמרכיבות את הרכיבים האלה.

התרשים הבא ממחיש איך הרכיבים האלה משתלבים באפליקציה טיפוסית.

הרכיבים השונים של אפליקציית מדיה שמשתמשת ב-Media3 מתחברים יחד בכמה דרכים פשוטות, כי הם משתפים ממשקים ומחלקות.
איור 1: רכיבים של אפליקציית מדיה

מידע נוסף זמין במאמר רכיבי הפעלה.

הטמעה של MediaLibraryService ו-MediaLibrarySession

MediaLibraryService מספק ממשק API סטנדרטי להצגה של ספריית המדיה שלכם ולאפשר גישה אליה. צריך לעשות את זה כשמוסיפים תמיכה ב-Android Auto או ב-Android Automotive OS לאפליקציית המדיה, כי הפלטפורמות האלה מספקות ממשק משתמש משלהן שמתאים לנהגים בשביל ספריית המדיה. מידע נוסף על הטמעה ושימוש ב-MediaLibraryService זמין במאמר הצגת תוכן באמצעות MediaLibraryService.

כדי להשתמש ברכיבי UI להפעלה, צריך להשתמש בסשן מדיה. ‫MediaSession API מספק דרך אוניברסלית לאינטראקציה עם נגן אודיו או וידאו. ספריית Jetpack Media3 כוללת את MediaLibrarySession, שמרחיב את MediaSession כדי להוסיף ממשקי API לעיון בתוכן.

קישור של סשן מדיה לנגן מאפשר לאפליקציה לפרסם הפעלת מדיה באופן חיצוני ולקבל פקודות הפעלה ממקורות חיצוניים כמו Android Auto,‏ Android Automotive OS או Google Assistant. מידע נוסף זמין במאמרים שליטה בהפעלה ופרסום שלה באמצעות MediaSession ושימוש ב-MediaLibrarySession.

לכל הפחות, סשן המדיה צריך להצהיר על תמיכה בפקודות הבאות של הנגן:

במדריך הפעלת רכיבי UI להפעלה מתוארות הדרכים שבהן אפשר להתאים אישית את רכיבי ה-UI להפעלה ברכבים.

כש-Android Auto או Android Automotive OS מתחברים לאפליקציה, הם מבקשים ספריית תוכן להצגה, וזה מפעיל את שיטת הקריאה החוזרת (callback) onGetLibraryRoot(). אתם יכולים להחזיר במהירות קובץ מדיה ברמה הבסיסית כדי לאפשר גישה לספרייה. שיטת הקריאה החוזרת onGetChildren() נקראת כש-Android Auto או Android Automotive OS מנסים לעיין ברמות עמוקות יותר של ספריית התוכן.

בפלטפורמות האלה יש מגבלות נוספות על המבנה של ספריית התוכן. במדריך יצירת שירות דפדפן מדיה מוסבר איך להתאים אישית את האופן שבו ספריית התוכן מוצגת.

הצהרה על תמיכה ב-Android Auto

כדי להצהיר שהאפליקציה לטלפון תומכת ב-Android Auto, צריך להשתמש ברשומה הבאה במניפסט:

<application>
    ...
    <meta-data android:name="com.google.android.gms.car.application"
        android:resource="@xml/automotive_app_desc"/>
    ...
</application>

הרשומה הזו במניפסט מפנה לקובץ XML שמצהיר על היכולות של האפליקציה שקשורות ל-Automotive. כדי לציין שיש לכם אפליקציית מדיה, הוסיפו קובץ XML בשם automotive_app_desc.xml לספרייה res/xml/ בפרויקט. הקובץ הזה צריך לכלול את התוכן הבא:

<automotiveApp>
    <uses name="media"/>
</automotiveApp>

הצהרה על תמיכה ב-Android Automotive OS

צריך ליצור מודול לכלי רכב כי אי אפשר לשתף את כל הלוגיקה של האפליקציה עם אפליקציה לכלי רכב. לחלק מהרכיבים של Android Automotive OS, כמו המניפסט, יש דרישות ספציפיות לפלטפורמה. צרו מודול שיכול להפריד בין הקוד של הרכיבים האלה לבין קוד אחר בפרויקט, כמו הקוד שמשמש לאפליקציה לנייד.

כדי להוסיף לפרויקט מודול לכלי רכב:

  1. ב-Android Studio, לוחצים על File > ‏New > ‏New Module (קובץ > חדש > מודול חדש).
  2. בוחרים באפשרות Automotive Module (מודול לכלי רכב) ולוחצים על Next (הבא).
  3. מזינים שם אפליקציה/ספרייה. זה השם שהמשתמשים רואים לאפליקציה שלכם ב-Android Automotive OS.
  4. מזינים שם מודול.
  5. משנים את שם החבילה כך שיתאים לאפליקציה.
  6. בוחרים באפשרות API 28: Android 9.0 (Pie)‎ בתור Minimum SDK ולוחצים על Next.

    כל המכוניות שתומכות ב-Android Automotive OS פועלות ב-Android 9 (רמת API‏ 28) ומעלה, כך שבחירה בערך הזה מטרגטת את כל המכוניות התואמות.

  7. בוחרים באפשרות No Activity (לא להוסיף פעילות) ואז לוחצים על Finish (סיום).

אחרי שיוצרים את המודול ב-Android Studio, פותחים את AndroidManifest.xml במודול החדש לכלי רכב:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.media">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme" />

    <uses-feature
        android:name="android.hardware.type.automotive"
        android:required="true" />

</manifest>

הרכיב application כולל מידע סטנדרטי על האפליקציה וגם רכיב uses-feature שמצהיר על תמיכה ב-Android Automotive OS. שימו לב שאין פעילויות שמוצהרות במניפסט.

אם אתם מטמיעים הגדרות או פעילויות כניסה, הוסיפו אותן כאן. הפעילויות האלה מופעלות על ידי המערכת באמצעות כוונות מפורשות, והן הפעילויות היחידות שאתם מצהירים עליהן במניפסט של האפליקציה ל-Android Automotive OS.

אחרי שמוסיפים הגדרות או פעילויות כניסה, משלימים את קובץ המניפסט על ידי הגדרת המאפיין android:appCategory="audio" ברכיב application והוספת הרכיבים הבאים של uses-feature:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.media">

    <application
        android:allowBackup="true"
        android:appCategory="audio"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme" />

    <uses-feature
        android:name="android.hardware.type.automotive"
        android:required="true" />

    <uses-feature
        android:name="android.hardware.wifi"
        android:required="false" />
    <uses-feature
        android:name="android.hardware.screen.portrait"
        android:required="false" />
    <uses-feature
        android:name="android.hardware.screen.landscape"
        android:required="false" />

</manifest>

הגדרה מפורשת של התכונות האלה כ-required="false" מבטיחה שהאפליקציה לא תתנגש עם תכונות החומרה שזמינות במכשירי Automotive OS.

כדי להצהיר שהאפליקציה תומכת ב-Android Automotive OS, צריך להשתמש ברשומה הבאה במניפסט:

<application>
    ...
    <meta-data android:name="com.android.automotive"
        android:resource="@xml/automotive_app_desc"/>
    ...
</application>

הרשומה הזו במניפסט מתייחסת לקובץ XML שמצהיר על היכולות של האפליקציה שקשורות ל-Automotive.

כדי לציין שיש לכם אפליקציית מדיה, הוסיפו קובץ XML בשם automotive_app_desc.xml לספרייה res/xml/ בפרויקט. מוסיפים את התוכן הבא לקובץ:

<automotiveApp>
    <uses name="media"/>
</automotiveApp>

מסנני Intent

מערכת Android Automotive OS משתמשת ב-intent מפורשים כדי להפעיל פעילויות באפליקציית המדיה. אל תכללו בקובץ המניפסט פעילויות שיש להן מסנני Intent מסוג CATEGORY_LAUNCHER או ACTION_MAIN.

פעילויות כמו זו שבדוגמה הבאה בדרך כלל מטרגטות טלפון או מכשיר נייד אחר. צריך להצהיר על הפעילויות האלה במודול שבונה את האפליקציה לטלפון, ולא במודול שבונה את האפליקציה ל-Android Automotive OS.

<activity android:name=".MyActivity">
<intent-filter>
<!-- You can't use either of these intents for Android Automotive OS -->
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
<!--
In their place, you can include other intent filters for any activities
that your app needs for Android Automotive OS, such as settings or
sign-in activities.
-->
</intent-filter>
</activity>

השלבים הבאים

עכשיו, כשיש לכם אפליקציה ל-Android Auto ול-Android Automotive OS, כדאי לבצע פעולות נוספות כדי לשפר את האפליקציה כך שהשימוש בה בזמן הנהיגה יהיה בטוח יותר. כדי לקבל המלצות נוספות שיעזרו לכם להבטיח חוויית משתמש בטוחה ונוחה, עיינו במדריכים הטכניים בנושאים הבאים: פעולות קוליות, אמצעי הגנה מפני הסחות דעת, וטיפול בשגיאות.

פיתוח אפליקציות להפעלת סרטונים ל-Android Automotive OS

אפליקציות של סרטונים מסווגות בנפרד מאפליקציות מדיה ברכבים, לכן חשוב לשים לב לדרישות הספציפיות לאפליקציות של סרטונים, כפי שמתואר במאמרים פיתוח אפליקציות בזמן חניה לרכבים ופיתוח אפליקציות של סרטונים ל-Android Automotive OS. מבצעים את הפעולות הבאות:

סימון האפליקציה כאפליקציית וידאו

כדי לציין שהאפליקציה תומכת בווידאו, מוסיפים את המאפיין android:appCategory="video" לרכיב <application> במניפסט.

<manifest ...>
    ...
    <application
      ...
      android:appCategory="video">
        ...
    </application>
</manifest>

הצהרה על תכונת החומרה של Android Automotive OS

כדי להצהיר שהאפליקציה תומכת במכשירי Android Automotive OS, צריך להוסיף את הרכיב android.hardware.type.automotive <uses-feature> למניפסט. במאמר הצהרה על תכונת החומרה של AAOS מוסבר אם להגדיר את המאפיין android:required לערך "false" או "true".

<manifest ...>
  ...
  <uses-feature android:name="android.hardware.type.automotive" ...>
  ...
</manifest>