הרחבת אפליקציית המדיה ל-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.

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

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

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

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

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

אם מטמיעים הגדרות או פעילויות שקשורות לכניסה לחשבון, צריך להוסיף אותן כאן. הפעילויות האלה מופעלות על ידי המערכת באמצעות מנגנוני Intent מפורשים, והן הפעילויות היחידות שמוצהרות במניפסט של אפליקציית 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 שבו מוצהרות היכולות של האפליקציה בתחום הרכב.

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

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

מסנני Intent

מערכת Android Automotive OS משתמשת ב-Intents מפורשים כדי להפעיל פעילויות באפליקציית המדיה. אל תכללו בקובץ המניפסט מסנני 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. צריך לפעול לפי ההוראות הבאות.

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

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

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

לאחר מכן, בתוך רכיב application של המניפסט, מוסיפים את רכיב meta-data הבא שמפנה לקובץ ה-XML:

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