ساختن برنامه ناوبری

این صفحه جزئیات ویژگی‌های مختلف «کتابخانه برنامه خودرو» را که می‌توانید برای پیاده‌سازی عملکرد برنامه ناوبری گام‌به‌گام استفاده کنید شرح می‌دهد.

پشتیبانی از ناوبری را در مانیفست خود اعلام کنید

برنامه ناوبری شما باید androidx.car.app.category.NAVIGATION دسته برنامه خودرو را در فیلتر هدف 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>

پشتیبانی از هدف‌های پیمایش

قالب‌های مختلف هدف به برنامه‌های ناوبری امکان می‌دهد با برنامه‌های دیگر، مانند برنامه‌های نقطه موردعلاقه و دستیارهای صوتی، کار کنند.

برای پشتیبانی از این قالب‌های هدف، ابتدا با افزودن فیلترهای هدف در مانیفست برنامه‌تان، پشتیبانی را اعلام کنید. مکان این فیلترهای هدف به پلاتفرم بستگی دارد:

  • Android Auto: در عنصر مانیفست <activity> برای Activity که برای مدیریت هدف وقتی کاربر از Android Auto استفاده نمی‌کند استفاده می‌شود.
  • سیستم‌عامل Android Automotive: در عنصر مانیفست <activity> برای CarAppActivity.

سپس، هدف‌ها را در هر دو onCreateScreen() و onNewIntent() برگشتی در پیاده‌سازی Session برنامه خود بخوانید و مدیریت کنید.

قالب‌های ضروری برای قصد خرید

برای برآورده کردن الزام کیفیت NF-6، برنامه شما باید هدف‌های پیمایش را مدیریت کند.

قالب‌های اختیاری قصد خرید

همچنین می‌توانید از قالب‌های هدف زیر برای افزایش بیشتر قابلیت همکاری برنامه‌تان پشتیبانی کنید:

دسترسی به الگوهای ناوبری

برنامه‌های ناوبری می‌توانند به الگوهای زیر دسترسی داشته باشند که سطحی را در پس‌زمینه با نقشه و، درطول ناوبری فعال، مسیرهای گام‌به‌گام نشان می‌دهند.

  • NavigationTemplate: الگویی که پیام اطلاعاتی اختیاری و تخمین‌های سفر را درطول ناوبری فعال نمایش می‌دهد.
  • MapWithContentTemplate: الگویی که به برنامه اجازه می‌دهد کاشی‌های نقشه را با نوعی محتوا (برای مثال، فهرست) پرداز کند. محتوا معمولاً به‌صورت رونهاد در بالای کاشی‌های نقشه ارائه می‌شود و مناطق قابل‌مشاهده و پایدار نقشه با محتوا تنظیم می‌شود.

برای جزئیات بیشتر درباره نحوه طراحی میانای کاربر برنامه پیمایش بااستفاده از این الگوها، برنامه‌های پیمایش را ببینید.

برای دسترسی به الگوهای ناوبری، برنامه شما باید اجازه androidx.car.app.NAVIGATION_TEMPLATES را در فایل AndroidManifest.xml خود اعلام کند:

<manifest ...>
  ...
  <uses-permission android:name="androidx.car.app.NAVIGATION_TEMPLATES"/>
  ...
</manifest>

برای کشیدن نقشه، اجازه دیگری لازم است.

انتقال به MapWithContentTemplate

از «سطح ۷ Car App API» شروع می‌شود، MapTemplate، PlaceListNavigationTemplate، و RoutePreviewNavigationTemplate نامناسب هستند. از الگوهای منسوخ همچنان پشتیبانی خواهد شد، اما انتقال به MapWithContentTemplate اکیداً توصیه می‌شود.

کارکرد ارائه‌شده توسط این الگوها را می‌توان بااستفاده از MapWithContentTemplate پیاده‌سازی کرد. برای مثال، گزیده‌های زیر را ببینید:

MapTemplate

// MapTemplate (deprecated)
val templateDeprecated = 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()

PlaceListNavigationTemplate

// PlaceListNavigationTemplate (deprecated)
val templateDeprecated = 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()

RoutePreviewNavigationTemplate

// RoutePreviewNavigationTemplate (deprecated)
val templateDeprecated = RoutePreviewNavigationTemplate.Builder()
    .setItemList(
        ItemList.Builder()
            .addItem(
                Row.Builder()
                    .setTitle(title)
                    .build()
            )
            .build()
    )
    .setHeader(header)
    .setNavigateAction(
        Action.Builder()
            .setTitle(actionTitle)
            .setOnClickListener { /* onClick */ }
            .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 { /* onClick */ }
                                    .build()
                            )
                            .build()
                    )
                    .build()
            )
            .setHeader(header)
            .build()
    )
    .setActionStrip(actionStrip)
    .setMapController(
        MapController.Builder()
            .setMapActionStrip(mapActionStrip)
            .build()
    )
    .build()

برنامه‌های ناوبری باید فراداده‌های ناوبری اضافی را با میزبان ارتباط برقرار کنند. میزبان از این اطلاعات برای ارائه اطلاعات به سیستم صوتی خودرو و جلوگیری از تداخل برنامه‌های پیمایش در منابع مشترک استفاده می‌کند.

فراداده ناوبری ازطریق NavigationManager خدمات خودرو که از CarContext دردسترس است ارائه می‌شود:

val navigationManager = carContext.getCarService(NavigationManager::class.java)

شروع، پایان، و توقف ناوبری

برای اینکه میزبان بتواند چندین برنامه ناوبری، اعلان‌های مسیریابی، و داده‌های دسته‌بندی خودرو را مدیریت کند، باید از وضعیت فعلی ناوبری مطلع باشد. وقتی کاربری ناوبری را شروع می‌کند، با NavigationManager.navigationStarted تماس بگیرید. به‌همین ترتیب، وقتی ناوبری پایان می‌یابد — برای مثال، وقتی کاربر به مقصدش می‌رسد یا ناوبری را لغو می‌کند — با NavigationManager.navigationEnded تماس بگیرید.

فقط وقتی کاربر پیمایش را تمام کرد با NavigationManager.navigationEnded تماس بگیر. برای مثال، اگر لازم است مسیر را در میان سفر دوباره محاسبه کنید، از Trip.Builder.setLoading(true) استفاده کنید.

گاهی اوقات، میزبان برای متوقف کردن پیمایش و تماس‌ها به برنامه‌ای نیاز دارد onStopNavigation در NavigationManagerCallback شیئی که برنامه‌تان ازطریق NavigationManager.setNavigationManagerCallback ارائه می‌دهد. سپس برنامه باید ارائه اطلاعات پیچ بعدی را در نمایشگر کیلومترشمار، اعلان‌های پیمایش، و راهنمایی صوتی متوقف کند.

به‌روزرسانی اطلاعات سفر

درحین ناوبری فعال، با NavigationManager.updateTrip تماس بگیرید. اطلاعات ارائه‌شده در این تماس می‌تواند توسط خوشه خودرو و نمایشگرهای سربالا استفاده شود. بسته به خودرو خاصی که درحال رانندگی است، همه اطلاعات به کاربر نمایش داده نمی‌شود. برای مثال، «واحد سر میزکار» (DHU) Step اضافه‌شده به Trip را نشان می‌دهد، اما اطلاعات Destination را نشان نمی‌دهد.

کشیدن روی «نمایشگر خوشه»

برای ارائه فراگیرترین تجربه کاربری، ممکن است بخواهید فراتر از نمایش فراداده پایه در نمایشگر خوشه خودرو عمل کنید. از «سطح Car App API 6» شروع می‌شود، برنامه‌های پیمایش این گزینه را دارند که محتوای خودشان را مستقیماً در نمایشگر خوشه (در خودروهای پشتیبانی‌شده) با محدودیت‌های زیر پرداز کنند:

  • «میانای برنامه‌سازی کاربردی نمایشگر خوشه‌ای» از کنترل‌های ورودی پشتیبانی نمی‌کند
  • دستورالعمل کیفیت برنامه خودرو NF-9: نمایشگر خوشه باید فقط کاشی‌های نقشه را نشان دهد. مسیر ناوبری فعال می‌تواند به‌صورت اختیاری در این کاشی‌ها نمایش داده شود.
  • میانای برنامه‌سازی کاربردی نمایشگر خوشه فقط از NavigationTemplate
    • برخلاف نمایشگرهای اصلی، نمایشگرهای کیلومترشمار ممکن است به‌طور پیوسته همه NavigationTemplate عناصر واسط کاربر، مثل دستورالعمل‌های گام‌به‌گام، کارت‌های زمان تخمینی رسیدن، و کنش‌ها را نشان ندهند. کاشی‌های نقشه تنها عنصر رابط کاربری هستند که به‌طور مداوم نمایش داده می‌شوند.

اعلام پشتیبانی از خوشه

برای اینکه برنامه میزبان بداند برنامه‌تان از پردازش در نمایشگرهای خوشه‌ای پشتیبانی می‌کند، باید عنصر androidx.car.app.category.FEATURE_CLUSTER <category> را به CarAppService <intent-filter> اضافه کنید، همان‌طور که در تکه کد زیر نشان داده شده است:

<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 نمایشگر خاصی ایجاد کنند تا عملکرد هر نمایشگر را سفارشی‌سازی کنند (همان‌طور که در گزیده زیر نشان داده شده است).

override fun onCreateSession(sessionInfo: SessionInfo): Session {
    return if (sessionInfo.displayType == SessionInfo.DISPLAY_TYPE_CLUSTER) {
        ClusterSession()
    } else {
        MainDisplaySession()
    }
}

هیچ تضمینی وجود ندارد که نمایشگر کیلومترشمار چه زمانی یا اصلاً ارائه شود، و همچنین ممکن است Session کیلومترشمار تنها Session باشد (برای مثال، کاربر نمایشگر اصلی را با برنامه دیگری عوض کرده است درحالی‌که برنامه شما درحال پیمایش فعال است). توافق «استاندارد» این است که برنامه فقط پس‌از فراخوانی NavigationManager::navigationStarted کنترل نمایشگر خوشه‌ای را به‌دست می‌آورد. بااین‌حال، ممکن است نمایشگر کیلومترشمار درحالی‌که هیچ پیمایش فعالی درحال انجام نیست به برنامه ارائه شود، یا ممکن است نمایشگر کیلومترشمار هرگز به برنامه ارائه نشود. برنامه شما باید با ارائه وضعیت غیرفعال کاشی‌های نقشه، این سناریوها را مدیریت کند.

میزبان برای هر Session، پوشه و CarContext نمونه جداگانه ایجاد می‌کند. این یعنی وقتی از روش‌هایی مثل ScreenManager::push یا Screen::invalidate استفاده می‌کنید، فقط Session که از آن فراخوانده شده است تحت‌تأثیر قرار می‌گیرد. اگر ارتباط بین نمونه‌های Session مختلف لازم باشد، برنامه‌ها باید کانال‌های ارتباطی خودشان را بین این نمونه‌ها ایجاد کنند (برای مثال، بااستفاده از همه‌فرستی‌ها، تک‌نمونه مشترک، یا چیز دیگری).

آزمایش پشتیبانی از خوشه

می‌توانید پیاده‌سازی‌تان را هم در Android Auto و هم در «سیستم عامل Android Automotive» آزمایش کنید. برای Android Auto، این کار با پیکربندی «واحد سرصفحه رایانه رومیزی» برای شبیه‌سازی نمایشگر خوشه ثانویه انجام می‌شود. برای «سیستم‌عامل Android Automotive»، تصاویر سیستم عمومی برای سطح API ۳۰ و بالاتر نمایشگر خوشه‌ای را شبیه‌سازی می‌کنند.

«زمان سفر تقریبی» را با نوشتار یا نماد سفارشی‌سازی کنید

برای سفارشی‌سازی تخمین سفر با نوشتار، نماد، یا هر دو، از TravelEstimate.Builder کلاس setTripIcon یا setTripText روش‌ها استفاده کنید. از NavigationTemplate برای TravelEstimate تنظیم اختیاری نوشتار و نماد در کنار یا به‌جای زمان تخمینی رسیدن، زمان باقی‌مانده، و فاصله باقی‌مانده استفاده می‌کند.

شکل ۱. برآورد سفر با نماد و نوشتار سفارشی.

تکه کد زیر از setTripIcon و setTripText برای سفارشی‌سازی کردن تخمین سفر استفاده می‌کند:

TravelEstimate.Builder(
    Distance.create(350.0, Distance.UNIT_METERS),
    arrivalTimeAtDestination
)
    .setTripIcon(
        CarIcon.Builder(
            IconCompat.createWithResource(carContext, R.drawable.ic_garage)
        ).build()
    )
    .setTripText(CarText.create("Custom Text"))
    .build()

اعلان‌های گام‌به‌گام ارائه دهید

ارائه دستورالعمل‌های ناوبری گام‌به‌گام (TBT) بااستفاده از اعلان ناوبری که به‌طور مکرر به‌روزرسانی می‌شود. برای اینکه اعلان شما در صفحه خودرو به‌عنوان اعلان پیمایش درنظر گرفته شود، سازنده اعلان شما باید کارهای زیر را انجام دهد:

  1. اعلان را با روش NotificationCompat.Builder.setOngoing به‌عنوان جاری علامت‌گذاری کنید.
  2. دسته اعلان را روی Notification.CATEGORY_NAVIGATION تنظیم کنید.
  3. اعلان را با CarAppExtender گسترش دهید.

اعلان پیمایش در ابزاره ریل در پایین صفحه خودرو نمایش داده می‌شود. اگر سطح اهمیت اعلان روی IMPORTANCE_HIGH تنظیم شده باشد، به‌عنوان اعلان سرصفحه (HUN) نیز نمایش داده می‌شود. اگر اهمیت با روش CarAppExtender.Builder.setImportance تنظیم نشده باشد، اهمیت کانال اعلان استفاده می‌شود.

برنامه می‌تواند PendingIntent را در CarAppExtender تنظیم کند که وقتی کاربر روی «واحد نمایش آگهی» یا ابزاره ریل تک‌ضرب می‌زند به برنامه ارسال می‌شود.

اگر NotificationCompat.Builder.setOnlyAlertOnce با مقدار true فراخوانده شود، اعلان اهمیت بالا فقط یک‌بار در HUN هشدار می‌دهد.

تکه‌کد زیر نحوه ساختن اعلان پیمایش را نشان می‌دهد:

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)
                    ),
                    PendingIntent.FLAG_IMMUTABLE
                )
            )
            .setImportance(NotificationManagerCompat.IMPORTANCE_HIGH)
            .build()
    )
    .build()

اعلان TBT را به‌طور منظم برای تغییرات فاصله به‌روزرسانی کنید، که ابزارک ریلی را به‌روزرسانی می‌کند، و اعلان را فقط به‌عنوان HUN نشان دهید. با تنظیم اهمیت اعلان با CarAppExtender.Builder.setImportance می‌توانید رفتار HUN را کنترل کنید. تنظیم اهمیت روی IMPORTANCE_HIGH باعث نمایش HUN می‌شود. تنظیم آن روی هر مقدار دیگری فقط ابزاره ریل را به‌روز می‌کند.

بازآوری محتوای «الگوی پیمایش فهرست مکان»

می‌توانید به رانندگان اجازه دهید با یک ضربه روی دکمه، محتوا را هنگام مرور فهرست مکان‌های ساخته‌شده با PlaceListNavigationTemplate بازآوری کنند. برای فعال کردن بازآوری فهرست، OnContentRefreshListener واسط onContentRefreshRequested روش را پیاده‌سازی کنید و از PlaceListNavigationTemplate.Builder.setOnContentRefreshListener برای تنظیم شنونده در الگو استفاده کنید.

تکه‌کد زیر نشان می‌دهد که چگونه شنونده را در الگو تنظیم کنید:

PlaceListNavigationTemplate.Builder()
    .setOnContentRefreshListener {
        // Execute any desired logic
        // Then call invalidate() so onGetTemplate() is called again
        screen.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 بازخوان را پیاده‌سازی کند. وقتی این برگشت‌تماس فراخوانی می‌شود، برنامه شما باید وقتی کاربر ناوبری را شروع می‌کند، ناوبری به مقصد انتخاب‌شده را شبیه‌سازی کند. هرزمان که چرخه حیات 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، برنامه ناوبری پیش‌فرض خودرو با آخرین برنامه ناوبری که کاربر راه‌اندازی کرده است مطابقت دارد. وقتی کاربر فرمان‌های ناوبری را ازطریق «دستیار» فرا می‌خواند یا وقتی برنامه دیگری قصد شروع ناوبری را ارسال می‌کند، برنامه پیش‌فرض قصد ناوبری را دریافت می‌کند.

نمایش هشدارهای ناوبری زمینه‌ای

Alert اطلاعات مهم را با کنش‌های اختیاری به راننده نمایش می‌دهد؛ بدون اینکه از زمینه صفحه ناوبری خارج شود. برای ارائه بهترین تجربه به راننده، Alert در NavigationTemplate کار می‌کند تا از مسدود کردن مسیر پیمایش جلوگیری کند و حواس‌پرتی راننده را به حداقل برساند.

‫Alert فقط در NavigationTemplate دردسترس است. برای مطلع کردن کاربر خارج از NavigationTemplate، از اعلان سرصفحه (HUN) استفاده کنید، همان‌طور که در نمایش اعلان‌ها توضیح داده شده است.

برای مثال، از Alert برای موارد زیر استفاده کنید:

  • راننده را از به‌روزرسانی‌های مربوط به ناوبری فعلی، مثل تغییر در وضعیت ترافیک، مطلع می‌کند.
  • از راننده بخواهید به‌روزرسانی مربوط به ناوبری فعلی را ارائه دهد، مثلاً وجود دوربین کنترل سرعت.
  • تکلیف آتی را پیشنهاد دهید و بپرسید آیا راننده آن را می‌پذیرد یا نه، مثلاً بپرسید آیا راننده مایل است شخصی را در مسیرش سوار کند یا نه.

در شکل پایه، Alert شامل عنوان و زمان Alert مدت می‌شود. زمان مدت با یک نوار پیشرفت نشان داده می‌شود. درصورت تمایل، می‌توانید زیرنویس، نماد، و حداکثر دو Action شیء اضافه کنید.

شکل ۲. هشدار پیمایش درون‌متنی.

وقتی Alert نشان داده می‌شود، اگر تعامل راننده منجر به ترک NavigationTemplate شود، به الگوی دیگری منتقل نمی‌شود. تا زمانی که Alert منقضی شود، کاربر اقدامی انجام دهد، یا برنامه Alert را ببندد، در NavigationTemplate اصلی باقی می‌ماند.

ایجاد هشدار

از Alert.Builder برای ایجاد نمونه Alert استفاده کنید:

Alert.Builder(
    1, // alertId
    CarText.create("Hello"), // title
    5000 // durationMillis
)
    // The fields below are optional
    .addAction(firstAction)
    .addAction(secondAction)
    .setSubtitle(CarText.create("Subtitle"))
    .setIcon(CarIcon.APP_ICON)
    .setCallback(alertCallback)
    .build()

اگر می‌خواهید به Alert لغو یا رد شدن گوش دهید، پیاده‌سازی AlertCallback رابط را ایجاد کنید. مسیرهای تماس AlertCallback عبارت‌اند از:

  • اگر Alert زمان‌بندی شود، میزبان متد AlertCallback.onCancel را با مقدار AlertCallback.REASON_TIMEOUT فرا می‌خواند. سپس روش AlertCallback.onDismiss را فرا می‌خواند.

  • اگر راننده روی یکی از دکمه‌های کنش کلیک کند، میزبان Action.OnClickListener را فرا می‌خواند و سپس AlertCallback.onDismiss را فرا می‌خواند.

  • اگر Alert پشتیبانی نشود، میزبان با مقدار AlertCallback.REASON_NOT_SUPPORTED AlertCallback.onCancel تماس می‌گیرد. میزبان با AlertCallback.onDismiss تماس نمی‌گیرد، زیرا Alert نشان داده نشد.

پیکربندی مدت هشدار

مدت زمان Alert را انتخاب کنید که با نیازهای برنامه شما مطابقت داشته باشد. مدت زمان توصیه‌شده برای ناوبری Alert ۱۰ ثانیه است. برای اطلاعات بیشتر، به هشدارهای ناوبری مراجعه کنید.

هشدار نشان داده شود

برای نمایش Alert، با AppManager.showAlert روش دردسترس ازطریق برنامه CarContext تماس بگیرید.

carContext.getCarService(AppManager::class.java).showAlert(alert)

  • تماس با showAlert با Alert که دارای alertId است که با شناسه Alert که ازقبل درحال نمایش است یکسان است هیچ کاری انجام نمی‌دهد. Alert به‌روزرسانی نمی‌شود. برای به‌روزرسانی Alert، باید آن را با alertId جدیدی بازسازی کنید.
  • تماس با showAlert با Alert که alertId متفاوتی نسبت‌به Alert درحال نمایش دارد باعث می‌شود هشدار نمایش داده‌شده Alert بسته شود.

بستن هشدار

درحالی‌که Alert به‌دلیل اتمام زمان یا تعامل راننده به‌طور خودکار بسته می‌شود، می‌توانید Alert را نیز به‌صورت دستی ببندید، مثلاً اگر اطلاعات آن قدیمی شود. برای بستن Alert، روش dismissAlert را با alertId Alert فراخوانی کنید.

carContext.getCarService(AppManager::class.java).dismissAlert(alert.id)

تماس با dismissAlert با alertId که با Alert ازقبل نمایش‌داده‌شده مطابقت ندارد کاری انجام نمی‌دهد. استثنا قائل نمی‌شود.