כשמשתמשים ב-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());
}