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

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

מהו Android למכוניות?

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

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

Android Auto

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

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

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

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

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

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

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

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

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

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

  1. ב-Android Studio, לוחצים על קובץ > חדש > מודול חדש.
  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 שמצהיר על היכולות הרכביות שהאפליקציה תומכת בהן.

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

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

מסנני כוונה

מערכת 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 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"/>