כשמשתמשים ב-Android Auto, הטלפון של המשתמש מחובר לרמקולים של המכונית, ולכן צריך לנקוט אמצעי זהירות נוספים כדי למנוע הסחת דעת של הנהג.
כשמפתחים אפליקציות מדיה ל-Android Auto, צריך להטמיע אמצעי הגנה ספציפיים כדי לצמצם את הסחות הדעת של הנהג. אמצעי ההגנה האלה כוללים:
האפליקציה שלך לא משמיעה אודיו באופן אוטומטי דרך הרמקולים של הרכב, גם לא עבור אזעקות שהמשתמש תזמן.
ניהול האופן שבו Android Auto מציג התראות כשהאפליקציה עוברת בין מוזיקה למודעות.
כדי לעשות את זה, משתמשים ב-API של CarConnection כדי לזהות אם הטלפון מוקרן למסך של רכב. אם כן, צריך להשבית את האזעקות או לספק ממשק משתמש בטלפון לניהול שלהן.
לגבי מודעות, מגדירים את מפתח המטא-נתונים METADATA_KEY_IS_ADVERTISEMENT כדי להסתיר התראות מסיחות את הדעת.
השתקת התראות קוליות ברכב
באפליקציות מדיה ל-Android Auto אסור להפעיל אודיו דרך הרמקולים של הרכב, אלא אם המשתמש מפעיל את ההשמעה, למשל על ידי לחיצה על כפתור הפעלה. גם אם המשתמש הגדיר באפליקציית המדיה אזעקה שתופעל בשעה מסוימת, אסור שהמוזיקה תתחיל להתנגן דרך הרמקולים של הרכב.
כדי לעמוד בדרישה הזו, האפליקציה יכולה להשתמש ב-CarConnection
כאות לפני הפעלת אודיו. האפליקציה יכולה לבדוק אם הטלפון מוקרן למסך ברכב. בודקים את LiveData בשביל סוג החיבור.
מאשרים שהערך שווה ל-CONNECTION_TYPE_PROJECTION.
אם הטלפון של המשתמש משדר, אפליקציות מדיה שתומכות בהתראות צריכות לבצע אחת מהפעולות הבאות:
משביתים את ההתראה.
השמעה חוזרת של השעון המעורר
STREAM_ALARMוהצגת ממשק משתמש במסך הטלפון להשבתת השעון המעורר.
טיפול במודעות מדיה
כברירת מחדל, ב-Android Auto מוצגת הודעה כשמטא-נתוני המדיה משתנים במהלך הפעלת אודיו. כשמפעילים מודעה באפליקציית מדיה בזמן שהיא מנגנת מוזיקה, הצגת התראה מסיחה את דעתו של המשתמש. כדי למנוע מ-Android Auto להציג התראה, מגדירים את מפתח המטא-נתונים של המדיה METADATA_KEY_IS_ADVERTISEMENT לערך METADATA_VALUE_ATTRIBUTE_PRESENT:
Kotlin
import androidx.media.utils.MediaConstants
override fun onPlayFromMediaId(mediaId: String, extras: Bundle?) {
MediaMetadataCompat.Builder().apply {
if (isAd(mediaId)) {
putLong(
MediaConstants.METADATA_KEY_IS_ADVERTISEMENT,
MediaConstants.METADATA_VALUE_ATTRIBUTE_PRESENT)
}
// ...add any other properties you normally would.
mediaSession.setMetadata(build())
}
}
Java
import androidx.media.utils.MediaConstants;
@Override
public void onPlayFromMediaId(String mediaId, Bundle extras) {
MediaMetadataCompat.Builder builder = new MediaMetadataCompat.Builder();
if (isAd(mediaId)) {
builder.putLong(
MediaConstants.METADATA_KEY_IS_ADVERTISEMENT,
MediaConstants.METADATA_VALUE_ATTRIBUTE_PRESENT);
}
// ...add any other properties you normally would.
mediaSession.setMetadata(builder.build());
}