בדף הזה מפורטות התכונות השונות של ספריית האפליקציות לרכב שבהן אפשר להשתמש כדי להטמיע את הפונקציונליות של אפליקציית הניווט במסלול המפורט.
הצהרה על תמיכה בניווט במניפסט
אפליקציית הניווט שלך צריכה להצהיר על androidx.car.app.category.NAVIGATION
קטגוריית אפליקציה של רכב ב-Intent
מסנן CarAppService
שלו:
<application>
...
<service
...
android:name=".MyNavigationCarAppService"
android:exported="true">
<intent-filter>
<action android:name="androidx.car.app.CarAppService" />
<category android:name="androidx.car.app.category.NAVIGATION"/>
</intent-filter>
</service>
...
</application>
תמיכה בכוונות ניווט
כדי לתמוך בכוונות ניווט אל האפליקציה, כולל אלה שמגיעות מ:
ל-Google Assistant באמצעות שאילתה קולית, האפליקציה שלך צריכה לטפל
CarContext.ACTION_NAVIGATE
ב-Intent שלו
Session.onCreateScreen
וגם
Session.onNewIntent
.
ניתן לעיין במסמכי התיעוד בנושא
CarContext.startCarApp
לפרטים על הפורמט של הכוונה.
איך ניגשים לתבניות הניווט
אפליקציות ניווט יכולות לגשת לתבניות הבאות, שמציגות פלטפורמה את הרקע עם המפה, ובמהלך ניווט פעיל, מסלול מפורט לקבלת מסלול.
NavigationTemplate
: מציג גם הודעה אינפורמטיבית אופציונלית והערכות נסיעה במהלך ניווט פעיל.MapWithContentTemplate
: תבנית שמאפשרת לאפליקציה לעבד אריחי מפה עם סוג כלשהו של תוכן (עבור לדוגמה, רשימה). התוכן מעובד בדרך כלל כשכבת-על מעל קטעי מפה, עם אזורים יציבים וגלויים במפה שמותאמים לתוכן.
לפרטים נוספים על עיצוב ממשק המשתמש של אפליקציית הניווט באמצעות תבניות כאלה מפורטות בקטע אפליקציות ניווט.
כדי לקבל גישה לתבניות הניווט, האפליקציה שלך צריכה להצהיר (declare) על האפליקציה
את ההרשאה androidx.car.app.NAVIGATION_TEMPLATES
קובץ AndroidManifest.xml
:
<manifest ...>
...
<uses-permission android:name="androidx.car.app.NAVIGATION_TEMPLATES"/>
...
</manifest>
כדי לצייר מפות נדרשת הרשאה נוספת.
מעבר אל MapWithContentTemplate
החל מגרסה 7 של Car App API,
MapTemplate
PlaceListNavigationTemplate
,
ו-RoutePreviewNavigationTemplate
הוצאו משימוש. נמשיך לתמוך בתבניות שהוצאו משימוש, אבל
מומלץ מאוד לעבור אל MapWithContentTemplate
.
ניתן להטמיע את הפונקציונליות שהתבניות האלה מספקות
באמצעות MapWithContentTemplate
. אפשר לעיין בקטעי הקוד הבאים כדי לראות דוגמאות:
תבנית מפה
Kotlin
// MapTemplate (deprecated) val template = MapTemplate.Builder() .setPane(paneBuilder.build()) .setActionStrip(actionStrip) .setHeader(header) .setMapController(mapController) .build() // MapWithContentTemplate val template = MapWithContentTemplate.Builder() .setContentTemplate( PaneTemplate.Builder(paneBuilder.build()) .setHeader(header) .build()) .setActionStrip(actionStrip) .setMapController(mapController) .build()
Java
// MapTemplate (deprecated) MapTemplate template = new MapTemplate.Builder() .setPane(paneBuilder.build()) .setActionStrip(actionStrip) .setHeader(header) .setMapController(mapController) .build(); // MapWithContentTemplate MapWithContentTemplate template = new MapWithContentTemplate.Builder() .setContentTemplate(new PaneTemplate.Builder(paneBuilder.build()) .setHeader(header) build()) .setActionStrip(actionStrip) .setMapController(mapController) .build();
PlaceListNavigationTemplate
Kotlin
// PlaceListNavigationTemplate (deprecated) val template = PlaceListNavigationTemplate.Builder() .setItemList(itemListBuilder.build()) .setHeader(header) .setActionStrip(actionStrip) .setMapActionStrip(mapActionStrip) .build() // MapWithContentTemplate val template = MapWithContentTemplate.Builder() .setContentTemplate( ListTemplate.Builder() .setSingleList(itemListBuilder.build()) .setHeader(header) .build()) .setActionStrip(actionStrip) .setMapController( MapController.Builder() .setMapActionStrip(mapActionStrip) .build()) .build()
Java
// PlaceListNavigationTemplate (deprecated) PlaceListNavigationTemplate template = new PlaceListNavigationTemplate.Builder() .setItemList(itemListBuilder.build()) .setHeader(header) .setActionStrip(actionStrip) .setMapActionStrip(mapActionStrip) .build(); // MapWithContentTemplate MapWithContentTemplate template = new MapWithContentTemplate.Builder() .setContentTemplate(new ListTemplate.Builder() .setSingleList(itemListBuilder.build()) .setHeader(header) .build()) .setActionStrip(actionStrip) .setMapController(new MapController.Builder() .setMapActionStrip(mapActionStrip) .build()) .build();
RoutePreviewNavigationTemplate: תבנית
Kotlin
// RoutePreviewNavigationTemplate (deprecated) val template = RoutePreviewNavigationTemplate.Builder() .setItemList( ItemList.Builder() .addItem( Row.Builder() .setTitle(title) .build()) .build()) .setHeader(header) .setNavigateAction( Action.Builder() .setTitle(actionTitle) .setOnClickListener { ... } .build()) .setActionStrip(actionStrip) .setMapActionStrip(mapActionStrip) .build() // MapWithContentTemplate val template = MapWithContentTemplate.Builder() .setContentTemplate( ListTemplate.Builder() .setSingleList( ItemList.Builder() .addItem( Row.Builder() .setTitle(title) .addAction( Action.Builder() .setTitle(actionTitle) .setOnClickListener { ... } .build()) .build()) .build()) .setHeader(header) .build()) .setActionStrip(actionStrip) .setMapController( MapController.Builder() .setMapActionStrip(mapActionStrip) .build()) .build()
Java
// RoutePreviewNavigationTemplate (deprecated) RoutePreviewNavigationTemplate template = new RoutePreviewNavigationTemplate.Builder() .setItemList(new ItemList.Builder() .addItem(new Row.Builder() .setTitle(title)) .build()) .build()) .setHeader(header) .setNavigateAction(new Action.Builder() .setTitle(actionTitle) .setOnClickListener(() -> { ... }) .build()) .setActionStrip(actionStrip) .setMapActionStrip(mapActionStrip) .build(); // MapWithContentTemplate MapWithContentTemplate template = new MapWithContentTemplate.Builder() .setContentTemplate(new ListTemplate.Builder() .setSingleList(new ItemList.Builder() .addItem(new Row.Builder() .setTitle(title)) .addAction(new Action.Builder() .setTitle(actionTitle) .setOnClickListener(() -> { ... }) .build()) .build()) .build())) .setHeader(header) .build()) .setActionStrip(actionStrip) .setMapController(new MapController.Builder() .setMapActionStrip(mapActionStrip) .build()) .build();
העברת מטא-נתונים של הניווט
אפליקציות ניווט חייבות להעביר מטא-נתונים נוספים לגבי הניווט עם מארח. המארח משתמש במידע כדי לספק מידע היחידה הראשית (HU) של הרכב ולמנוע התנגשות של אפליקציות ניווט במשאבים משותפים.
מטא-נתונים של ניווט מסופקים באמצעות
NavigationManager
שירות מכוניות שניתן לגשת אליו
CarContext
:
Kotlin
val navigationManager = carContext.getCarService(NavigationManager::class.java)
Java
NavigationManager navigationManager = carContext.getCarService(NavigationManager.class);
התחלה, סיום ועצירה של הניווט
כדי שהמארח ינהל כמה אפליקציות ניווט, התראות ניתוב,
ונתונים של אשכול הרכבים, הם צריכים להיות מודעים למצב הנוכחי של
ניווט. כשמשתמש מתחיל את הניווט, התקשר
NavigationManager.navigationStarted
באותו אופן, כשהניווט מסתיים – לדוגמה, כשהמשתמש מגיע
יעד או שהמשתמש יבטל את הניווט — התקשר
NavigationManager.navigationEnded
התקשרות רק אל NavigationManager.navigationEnded
כשהמשתמש מסיים לנווט. לדוגמה, אם צריך לחשב מחדש
המסלול באמצע הנסיעה, השתמשו
Trip.Builder.setLoading(true)
במקום זאת.
מדי פעם, למארח נדרש אפליקציה כדי להפסיק את הניווט והשיחות
onStopNavigation
תוך
NavigationManagerCallback
שסופק על ידי האפליקציה באמצעות
NavigationManager.setNavigationManagerCallback
.
לאחר מכן האפליקציה חייבת להפסיק להנפיק מידע לגבי הפנייה הבאה בתצוגת האשכול
הודעות ניווט והנחיות קוליות.
עדכון פרטי הנסיעה
במהלך הניווט הפעיל, מבצעים שיחה
NavigationManager.updateTrip
המידע שנמסר בשיחה הזו יכול לשמש את אשכול הרכב וגם
ובתצוגה עילית. לא כל הרכבים משתנים, בהתאם לרכב
המידע מוצג למשתמש.
לדוגמה, יחידת הראש למחשב (DHU) מראה
Step
שהתווסף
Trip
, אבל לא מופיע
ה-Destination
מידע.
שרטוט של תצוגת האשכול
כדי לספק את חוויית המשתמש הסוחפת ביותר, הצגת מטא-נתונים בסיסיים במסך אשכול הרכב. החל מרמה 6 של Car App API, באפליקציות ניווט יש אפשרות לבצע רינדור את התוכן שלהם ישירות במסך האשכול (בכלי רכב נתמכים), וכן המגבלות הבאות:
- ה-API לתצוגה של אשכול לא תומך בבקרות על קליטת נתונים
- תצוגת האשכול צריכה להציג רק משבצות מפה. אם יש מסלול פעיל בניווט תוצג באופן אופציונלי במשבצות האלה.
- ה-API לתצוגה של אשכולות תומך רק בשימוש
NavigationTemplate
- בשונה מתצוגות ראשיות, ייתכן שבמסכים של אשכולות לא יוצגו כל הפריטים באופן עקבי
NavigationTemplate
רכיבי ממשק המשתמש, כמו הוראות מפורטות, זמן הגעה משוער לכרטיסים ולפעולות. משבצות מפה הן ממשק המשתמש היחיד שמוצג באופן עקבי לרכיב מסוים.
- בשונה מתצוגות ראשיות, ייתכן שבמסכים של אשכולות לא יוצגו כל הפריטים באופן עקבי
הצהרה על תמיכה באשכול
כדי להודיע לאפליקציה המארחת שהאפליקציה שלך תומכת בעיבוד באשכול
מסכים, עליך להוסיף androidx.car.app.category.FEATURE_CLUSTER
רכיב <category>
ל-<intent-filter>
של CarAppService
כמו שמוצג
קטע הקוד הבא:
<application> ... <service ... android:name=".MyNavigationCarAppService" android:exported="true"> <intent-filter> <action android:name="androidx.car.app.CarAppService" /> <category android:name="androidx.car.app.category.NAVIGATION"/> <category android:name="androidx.car.app.category.FEATURE_CLUSTER"/> </intent-filter> </service> ... </application>
ניהול מחזור חיים ומצב
החל מרמת API 6, האפליקציה לרכב
זרימת מחזור חיים
נשאר ללא שינוי, אבל עכשיו CarAppService::onCreateSession
לוקח פרמטר של
מקלידים SessionInfo
שמספקים
מידע נוסף על Session
שנוצר (כלומר, התצוגה
הסוג והקבוצה של התבניות הנתמכות).
לאפליקציות יש אפשרות להשתמש באותה מחלקה Session
כדי לטפל גם
אשכול ומסך ראשי, או ליצור Sessions
ספציפי למסך כדי להתאים אישית
בכל תצוגה (כפי שמוצג בקטע הקוד הבא).
Kotlin
override fun onCreateSession(sessionInfo: SessionInfo): Session { return if (sessionInfo.displayType == SessionInfo.DISPLAY_TYPE_CLUSTER) { ClusterSession() } else { MainDisplaySession() } }
Java
@Override @NonNull public Session onCreateSession(@NonNull SessionInfo sessionInfo) { if (sessionInfo.getDisplayType() == SessionInfo.DISPLAY_TYPE_CLUSTER) { return new ClusterSession(); } else { return new MainDisplaySession(); } }
אנחנו לא יכולים להבטיח מתי או אם
צג האשכול מסופק, וכן
יכול להיות גם שהאשכול Session
יהיה ה-Session
היחיד (עבור
לדוגמה, המשתמש החליף את המסך הראשי לאפליקציה אחרת בזמן שהאפליקציה שלכם
בניווט פעיל). העמודה "רגילה" היא שהאפליקציה מקבלת שליטה
הצגת אשכול רק אחרי NavigationManager::navigationStarted
שנקראה. עם זאת, יכול להיות שהאפליקציה תקבל את תצוגת האשכול
בזמן שלא מתרחש ניווט פעיל, או שהאשכול לעולם לא יסופק
מסך. האפליקציה שלך צריכה לטפל בתרחישים האלה על ידי עיבוד של
מצב לא פעיל של קטעי המפה.
המארח יוצר קישור נפרד ומופעי CarContext
לכל Session
. הזה
כלומר, כשמשתמשים בשיטות כמו ScreenManager::push
או
Screen::invalidate
, רק ה-Session
שממנו הן נקראות
הושפעו. האפליקציות צריכות ליצור ערוצי תקשורת משלהן בין
אם נדרשת תקשורת בין Session
(לדוגמה, באמצעות
שידורים, סינגלטון משותף או משהו
אחר).
תמיכה באשכולות
אפשר לבדוק את ההטמעה ב-Android Auto וגם ב-Android Automotive OS. ב-Android Auto, אפשר לעשות זאת על ידי הגדרת האמולציה של היחידה הראשית לשולחן העבודה תצוגת אשכול משני. עבור את Android Automotive OS, תמונות מערכת גנריות ל-API ברמה 30 ואילך לאמולציה של תצוגת אשכול.
התאמה אישית של Travelassess באמצעות טקסט או סמל
כדי להתאים אישית את האומדן של הנסיעה בעזרת טקסט, סמל או שניהם, משתמשים
TravelEstimate.Builder
של הכיתה
setTripIcon
או
setTripText
שיטות.
NavigationTemplate
משתמשת
TravelEstimate
כדי להגדיר טקסט וסמלים לצד הזמן המשוער או במקומו
שעת ההגעה, הזמן שנותר והמרחק שנותר.
קטע הקוד הבא משתמש ב-setTripIcon
וב-setTripText
כדי להתאים אישית את
אומדן לנסיעה:
Kotlin
TravelEstimate.Builder(Distance.create(...), DateTimeWithZone.create(...)) ... .setTripIcon(CarIcon.Builder(...).build()) .setTripText(CarText.create(...)) .build()
Java
new TravelEstimate.Builder(Distance.create(...), DateTimeWithZone.create(...)) ... .setTripIcon(CarIcon.Builder(...).build()) .setTripText(CarText.create(...)) .build();
הצגת מסלול מפורט
לספק הוראות ניווט מפורטות (TBT) באמצעות התראת ניווט מעודכנת. כדי שיטופלו כניווט במסך המכונית, יוצר ההתראות צריך לבצע הבאים:
- מסמנים את ההתראה כהתראה מתמשכת באמצעות
NotificationCompat.Builder.setOngoing
. - מגדירים את קטגוריית ההתראה ל
Notification.CATEGORY_NAVIGATION
. - הארכת ההתראה באמצעות
CarAppExtender
התראת ניווט מוצגת בווידג'ט הרכבת שבחלק התחתון של
במסך המכונית. אם רמת החשיבות של ההתראה מוגדרת לערך
IMPORTANCE_HIGH
, הוא מוצג גם כהתראה 'שימו לב' (HUN).
אם לא מגדירים חשיבות עם
CarAppExtender.Builder.setImportance
את ה-method
החשיבות של ערוץ ההתראות
נעשה שימוש.
האפליקציה יכולה להגדיר PendingIntent
ב
CarAppExtender
ש
נשלחת לאפליקציה כשהמשתמש מקיש על HUN או על ווידג'ט הרכבת.
אם המיקום
NotificationCompat.Builder.setOnlyAlertOnce
נקרא עם הערך true
, התראה על חשיבות גבוהה מיועדת רק להתראה על חשיבות גבוהה
פעם ב-HUN.
בקטע הבא מוסבר איך ליצור התראת ניווט:
Kotlin
NotificationCompat.Builder(context, NOTIFICATION_CHANNEL_ID) ... .setOnlyAlertOnce(true) .setOngoing(true) .setCategory(NotificationCompat.CATEGORY_NAVIGATION) .extend( CarAppExtender.Builder() .setContentTitle(carScreenTitle) ... .setContentIntent( PendingIntent.getBroadcast( context, ACTION_OPEN_APP.hashCode(), Intent(ACTION_OPEN_APP).setComponent( ComponentName(context, MyNotificationReceiver::class.java)), 0)) .setImportance(NotificationManagerCompat.IMPORTANCE_HIGH) .build()) .build()
Java
new NotificationCompat.Builder(context, NOTIFICATION_CHANNEL_ID) ... .setOnlyAlertOnce(true) .setOngoing(true) .setCategory(NotificationCompat.CATEGORY_NAVIGATION) .extend( new CarAppExtender.Builder() .setContentTitle(carScreenTitle) ... .setContentIntent( PendingIntent.getBroadcast( context, ACTION_OPEN_APP.hashCode(), new Intent(ACTION_OPEN_APP).setComponent( new ComponentName(context, MyNotificationReceiver.class)), 0)) .setImportance(NotificationManagerCompat.IMPORTANCE_HIGH) .build()) .build();
לעדכן את ההתראה TBT באופן קבוע לגבי המרחק
שמעדכנים את ווידג'ט הרכבת, ומציגים את ההתראה רק כ-HUN.
אפשר לשלוט בהתנהגות HUN באמצעות הגדרת חשיבות ההתראה באמצעות
CarAppExtender.Builder.setImportance
הגדרת החשיבות כ
ב-IMPORTANCE_HIGH
רואים HUN. ההגדרה
לכל ערך אחר שרק יעדכן את ווידג'ט הרכבת.
רענון התוכן של PlaceListNavigationTemplate
אתם יכולים לאפשר לנהגים לרענן תוכן בהקשת לחצן במהלך הגלישה
רשימות של מקומות שנבנו באמצעות
PlaceListNavigationTemplate
כדי להפעיל רענון של רשימות, צריך להטמיע את
OnContentRefreshListener
ממשק
onContentRefreshRequested
שיטה ושימוש
PlaceListNavigationTemplate.Builder.setOnContentRefreshListener
כדי להגדיר את ה-listener בתבנית.
בקטע הבא מוסבר איך להגדיר את ה-listener בתבנית:
Kotlin
PlaceListNavigationTemplate.Builder() ... .setOnContentRefreshListener { // Execute any desired logic ... // Then call invalidate() so onGetTemplate() is called again invalidate() } .build()
Java
new PlaceListNavigationTemplate.Builder() ... .setOnContentRefreshListener(() -> { // Execute any desired logic ... // Then call invalidate() so onGetTemplate() is called again invalidate(); }) .build();
לחצן הרענון מוצג רק בכותרת של
PlaceListNavigationTemplate
אם למאזינים יש ערך.
כשהמשתמש לוחץ על לחצן הרענון,
אמצעי תשלום אחד (onContentRefreshRequested
)
מתבצעת קריאה להטמעה של OnContentRefreshListener
. בטווח של
onContentRefreshRequested
, קוראים לפונקציה
Screen.invalidate
.
אחר כך המארח מתקשר חזרה לאפליקציה
Screen.onGetTemplate
כדי לאחזר את התבנית עם התוכן שעבר רענון. צפייה
רענון התוכן של תבנית עבור
מידע נוסף על רענון תבניות. כל עוד התבנית הבאה
הוחזר על ידי
onGetTemplate
הוא מתוך
מאותו סוג, זה נחשב כרענון ולא נכלל
במכסת התבניות.
מתן הנחיות קוליות
כדי להפעיל את הוראות הניווט דרך הרמקולים של הרכב, האפליקציה צריכה לבקש
מיקוד אודיו. כחלק
AudioFocusRequest
, קבוצה
השימוש בתור AudioAttributes.USAGE_ASSISTANCE_NAVIGATION_GUIDANCE
. כמו כן,
להגדיר את רווח הפוקוס כ-AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK
.
הדמיה של ניווט
כדי לאמת את פונקציית הניווט של האפליקציה כששולחים אותה אל
בחנות Google Play, באפליקציה צריך להטמיע את
NavigationManagerCallback.onAutoDriveEnabled
קריאה חוזרת. כשמתבצעת קריאה חוזרת (callback) של האפליקציה, האפליקציה צריכה לדמות ניווט אל
היעד שנבחר כשהמשתמש מתחיל בניווט. אפשר לצאת מהאפליקציה הזו
במצב הנוכחי בכל פעם שמחזור החיים של Session
הנוכחי
מגיע אל
Lifecycle.Event.ON_DESTROY
.
אפשר לבדוק שההטמעה של onAutoDriveEnabled
נקראת על ידי
הרצת הפקודה הבאה משורת הפקודה:
adb shell dumpsys activity service CAR_APP_SERVICE_NAME AUTO_DRIVE
אפשר לראות זאת בדוגמה הבאה:
adb shell dumpsys activity service androidx.car.app.samples.navigation.car.NavigationCarAppService AUTO_DRIVE
אפליקציית ברירת המחדל לרכב
ב-Android Auto, אפליקציית הניווט במכונית שמוגדרת כברירת מחדל תואמת אפליקציית הניווט שהמשתמש הפעיל. אפליקציית ברירת המחדל מקבל כוונות ניווט כשהמשתמש מפעילה פקודות ניווט דרך Assistant או כשאפליקציה אחרת שולחת כוונה להתחיל בניווט.
הצגת התראות ניווט לפי הקשר
ב-Alert
מוצג 'חשוב'
מידע לנהג עם פעולות אופציונליות‐בלי לצאת מההקשר של
במסך הניווט. כדי לספק לנהג את החוויה הטובה ביותר,
Alert
פועל במסגרת
NavigationTemplate
כדי להימנע מחסימת מסלול הניווט ולצמצם את הסחות הדעת של הנהג.
Alert
זמין רק בNavigationTemplate
.
כדי לשלוח הודעה למשתמש מחוץ ל-NavigationTemplate
,
מומלץ להשתמש בהתראה 'שימו לב' (HUN), כפי שמוסבר ב
הצגת התראות.
לדוגמה, אפשר להשתמש ב-Alert
כדי:
- צריך להודיע לנהג על עדכון שרלוונטי לניווט הנוכחי, כמו שינוי במצב התנועה.
- מבקשים מהנהג עדכון שקשור לניווט הנוכחי, למשל: קיום של מכמונת מהירות.
- מציעים משימה קרובה ושואלים אם הנהג מאשר אותה למשל, אם הנהג מוכן לאסוף מישהו בדרכו.
בצורתו הבסיסית, Alert
מורכב מכותרת ומ-Alert
משך הזמן. משך הזמן מיוצג על ידי סרגל התקדמות. אופציונלי:
אפשר להוסיף כותרת משנה, סמל, ועד שניים
Action
אובייקטים.
אחרי ש-Alert
מוצג, הוא לא מועבר לתבנית אחרת אם
האינטראקציה של הנהג/ת מובילה ליציאה מNavigationTemplate
.
הוא יישאר בגרסה המקורית של NavigationTemplate
עד לסיום הזמן הקצוב לתפוגה של Alert
, המשתמש
תבצע פעולה, או שהאפליקציה תסגור את Alert
.
יצירת התראה
שימוש ב-Alert.Builder
כדי ליצור מכונה של Alert
:
Kotlin
Alert.Builder( /*alertId*/ 1, /*title*/ CarText.create("Hello"), /*durationMillis*/ 5000 ) // The fields below are optional .addAction(firstAction) .addAction(secondAction) .setSubtitle(CarText.create(...)) .setIcon(CarIcon.APP_ICON) .setCallback(...) .build()
Java
new Alert.Builder( /*alertId*/ 1, /*title*/ CarText.create("Hello"), /*durationMillis*/ 5000 ) // The fields below are optional .addAction(firstAction) .addAction(secondAction) .setSubtitle(CarText.create(...)) .setIcon(CarIcon.APP_ICON) .setCallback(...) .build();
אם ברצונך להאזין לAlert
לביטול או סגירה, ליצור יישום של
ממשק AlertCallback
.
נתיבי השיחות של AlertCallback
הם:
אם הזמן הקצוב לתפוגה של
Alert
, המארח יקרא ל-AlertCallback.onCancel
עםAlertCallback.REASON_TIMEOUT
עם ערך מסוים. לאחר מכן היא קוראת ל-AlertCallback.onDismiss
.אם הנהג לוחץ על אחד מלחצני הפעולה, המארח מתקשר
Action.OnClickListener
ואז קוראת ל-AlertCallback.onDismiss
.אם
Alert
לא נתמך, המארח יתקשרAlertCallback.onCancel
עםAlertCallback.REASON_NOT_SUPPORTED
עם ערך מסוים. המארח לא מתקשרAlertCallback.onDismiss
, כיAlert
לא הוצג.
הגדרת משך ההתראה
צריך לבחור משך זמן של Alert
תואם לצורכי האפליקציה שלכם. משך הזמן המומלץ לניווט
משך הזמן של Alert
הוא 10 שניות. מידע נוסף זמין בקטע התראות ניווט.
אפשר לקבל מידע נוסף.
הצגת התראה
כדי להציג Alert
, צריך להתקשר אל
AppManager.showAlert
שזמינות דרך
CarContext
.
// Show an alert
carContext.getCarService(AppManager.class).showAlert(alert)
- שיחה אל
showAlert
באמצעותAlert
עםalertId
שזהה למזהה שלAlert
שמוצג כרגע, לא עושה דבר. המכשירAlert
לא מתעדכן. כדי לעדכןAlert
, צריך ליצור מחדש אותו עםalertId
חדש. - שיחה אל
showAlert
באמצעותAlert
עםalertId
מהסכום שמוצג כרגע ב-Alert
סוגר אתAlert
מוצגים כרגע.
סגירת התראה
כאשר Alert
נסגר באופן אוטומטי
עקב הזמן הקצוב לתפוגה או עקב אינטראקציה עם הנהג, אפשר גם לסגור באופן ידני
Alert
, למשל אם המידע שלו הופך ללא עדכני. כדי לדחות
Alert
, קוראים לפונקציה
dismissAlert
עם
alertId
של Alert
.
// Dismiss the same alert
carContext.getCarService(AppManager.class).dismissAlert(alert.getId())
שיחה אל dismissAlert
עם alertId
שלא תואם כרגע
שמוצג Alert
לא עושה דבר. היא לא גורמת לחריגה.