Navigasyon uygulaması oluşturma

Bu sayfada, araba uygulaması kitaplığının kullanabileceğiniz farklı özellikleri açıklanmaktadır. adım adım navigasyon uygulamanızın işlevselliğini uygulamak için.

Manifest'inizde gezinme desteğini beyan edin

Navigasyon uygulamanızın androidx.car.app.category.NAVIGATION beyan etmesi gerekiyor Amaçtaki araba uygulaması kategorisi CarAppService filtresini uygulayın:

<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>

Gezinme amaçlarına yönelik destek

kullanıyorsanız uygulamanızın CarContext.ACTION_NAVIGATE ve Session.onCreateScreen ve Session.onNewIntent.

Şu konuyla ilgili belgelere göz atın: CarContext.startCarApp konusuna bakın.

Gezinme şablonlarına erişme

Navigasyon uygulamaları, bir yüzeyin gösterildiği aşağıdaki şablonlara erişebilir: arka planda haritada ve aktif navigasyon sırasında, adım adım yol tarifleri alın.

  • NavigationTemplate: Ayrıca, isteğe bağlı bir bilgilendirme mesajı ve aktif navigasyon sırasında seyahat tahminleri de görüntüler.
  • MapWithContentTemplate: Uygulamanın bir tür içeriğe sahip harita karoları (herhangi bir konum için) bir liste olabilir.) İçerik genellikle içeriğin üst kısmında bir yer paylaşımı içeriğe göre ayarlama yapan, haritada görünen ve sabit alanların bulunduğu harita parçaları.

Navigasyon uygulamanızın kullanıcı arayüzünü aşağıdakileri kullanarak tasarlama hakkında daha ayrıntılı bilgi için bu şablonlar için Navigasyon uygulamaları bölümüne bakın.

Gezinme şablonlarına erişmek için uygulamanızın şunu beyan etmesi gerekiyor: içindeki androidx.car.app.NAVIGATION_TEMPLATES iznini AndroidManifest.xml dosyası:

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

Harita çizmek için ek bir izin gerekiyor.

MapWithContentTemplate'e taşıma

Car App API düzeyi 7'den başlayarak MapTemplate PlaceListNavigationTemplate, ve RoutePreviewNavigationTemplate kullanımdan kaldırılmıştır. Desteği sonlandırılan şablonlar desteklenmeye devam edecektir. MapWithContentTemplate ürününe taşınması önemle tavsiye edilir.

Bu şablonların sağladığı işlevler, (MapWithContentTemplate) kullanarak. Örnekler için aşağıdaki snippet'lere bakın:

HaritaŞablonu

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();

Yer Listesi Gezinme Şablonu

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();

RotaÖnizlemeGezinmeŞablonu

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();

Navigasyon uygulamaları, ek navigasyon meta verilerini ana bilgisayar. Düzenleyen, bu bilgileri ve navigasyon uygulamalarının çakışmasını önlemek için koordineli olacaklardır.

Navigasyon meta verileri, NavigationManager şuradan erişilebilen araba hizmeti: CarContext:

Kotlin

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

Java

NavigationManager navigationManager = carContext.getCarService(NavigationManager.class);

Navigasyonu başlatma, sonlandırma ve durdurma

Düzenleyenin birden fazla gezinme uygulamasını, yönlendirme bildirimlerini, aracınızın mevcut durumu hakkında bilgi sahibi olması gerekir. yardımcı olabilir. Bir kullanıcı navigasyonu başlattığında NavigationManager.navigationStarted. Benzer bir şekilde, gezinme sona erdiğinde (örneğin, kullanıcı ana hedef yoksa kullanıcı navigasyonu iptal ederse (arama) NavigationManager.navigationEnded.

Yalnızca NavigationManager.navigationEnded numaralı telefonu ara Kullanıcı gezinmeyi bitirdiğinde. Örneğin, aylık bütçenizi yolculuğun ortasındaki rotayı, Trip.Builder.setLoading(true) .

Bazen toplantıyı düzenleyen kişinin, navigasyonu ve aramaları durdurmak için bir uygulamaya ihtiyacı vardır onStopNavigation NavigationManagerCallback tarafından sağlanan nesne NavigationManager.setNavigationManagerCallback. Uygulama, daha sonra küme ekranında sonraki dönüş bilgilerini vermeyi durdurmalıdır. navigasyon bildirimleri ve sesli yardım.

Gezi bilgilerini güncelleyin

Etkin navigasyon sırasında şu numarayı ara: NavigationManager.updateTrip. Bu görüşmede sağlanan bilgiler, araç seti ve uyarı ekranları. Sürüşteki araca bağlı olarak tüm bu araçlar, bilgiler kullanıcıya görüntülenir. Örneğin, Masaüstü Ana Birimi (DHU) Step Trip, ancak gösterilmiyor Destination ekleyebilirsiniz.

Küme Ekranına Çizim

En kapsamlı kullanıcı deneyimini sunmak için Aracın ekran görüntüsünde temel meta verileri gösterme. Car App API 6. seviyeden itibaren navigasyon uygulamalarında oluşturma seçeneği bulunur. kendi içeriklerini doğrudan küme ekranında kullanabilir (desteklenen araçlarda). aşağıdaki sınırlamalara tabidir:

  • Küme görüntüleme API'si giriş kontrollerini desteklemiyor
  • Küme görüntüsü yalnızca harita parçalarını göstermelidir. Etkin bir rota navigasyonu, isteğe bağlı olarak görüntülenebilir.
  • Küme görüntüleme API'si yalnızca NavigationTemplate
    • Ana ekranlardan farklı olarak, küme ekranları tutarlı bir şekilde NavigationTemplate Adım adım talimatlar, TVS gibi kullanıcı arayüzü öğeleri kartlar ve işlemler. Harita parçaları tutarlı bir şekilde görüntülenen tek kullanıcı arayüzüdür öğesine dokunun.

Küme Desteğini Bildirme

Ana makine uygulamaya, uygulamanızın küme üzerinde oluşturmayı desteklediğini bildirmek için bir androidx.car.app.category.FEATURE_CLUSTER eklemeniz gerekiyor Aşağıdaki gibi CarAppService cihazınızın <intent-filter> öğesine <category> öğesi aşağıdaki snippet:

<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>

Yaşam Döngüsü ve Durum Yönetimi

API düzeyi 6'dan başlayarak araba uygulaması yaşam döngüsü akışı aynı kalır, ancak şimdi CarAppService::onCreateSession parametresi SessionInfo türünde oluşturulmakta olan Session hakkında ek bilgi (yani türünü ve desteklenen şablon kümesini) ayarlayın.

Uygulamalar, her iki sınıfı da yönetmek için aynı Session sınıfını kullanma seçeneğine sahiptir. küme ve ana ekran ya da özelleştirmek için ekrana özgü Sessions oluşturun her bir ekrandaki davranışının bir örneğidir (aşağıdaki snippet'te gösterildiği gibi).

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();
  }
}

Küme görüntüsünün ne zaman veya sağlanacağı ile ilgili garanti verilmez ve aynı zamanda Session kümesinin tek Session olması da mümkündür ( Örneğin, sizin uygulamanız çalışırken kullanıcı ana ekranı başka bir uygulamaya aktif olarak gezinme) "Standart" uygulamanın sahip olduğu küme görüntüsü yalnızca NavigationManager::navigationStarted ayarlandıktan sonra çağrıldı. Bununla birlikte, uygulamaya küme ekranı sağlanabilir etkin gezinme olmaması veya kümeye hiçbir zaman sağlanmaması görüntüleyin. Uygulamanızın harita parçalarının boşta kalma durumu.

Ana makine, her Session için ayrı bağlayıcı ve CarContext örnek oluşturur. Bu bu nedenle, ScreenManager::push veya Screen::invalidate, yalnızca çağrıldıkları Session yardımcı olabilir. Uygulamalar bu uygulamalar arasında kendi iletişim kanallarını oluşturmalıdır gerektiğinde (örneğin, birden fazla bağlantı yöntemini kullanarakSession) yayınlar, paylaşılan tekil içerikler veya else).

Küme Desteğini Test Etme

Uygulamanızı hem Android Auto hem de Android Automotive OS'te test edebilirsiniz. Android Auto'da bu işlem, emüle etmek için Masaüstü Ana Birimi'ni yapılandırarak ikincil küme görüntüsü oluşturabilirsiniz. Örneğin, Android Automotive OS, API için genel sistem görüntüleri ve üstü bir küme ekranı emüle eder.

Seyahat tahminini metin veya simge ile özelleştirin

Seyahat tahminini metin, simge veya her ikisi ile özelleştirmek için TravelEstimate.Builder sınıfın setTripIcon veya setTripText yöntemlerine göz atın. İlgili içeriği oluşturmak için kullanılan NavigationTemplate kullanım alanları TravelEstimate isteğe bağlı olarak tahmini sürenin yanında veya yerine metin ve simgeler ayarlayın ve kalan mesafeyi gösterir.

Şekil 1. Özel simge ve metin ile seyahat tahmini.

Aşağıdaki snippet,setTripIconsetTripText seyahat tahmini:

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();

Adım adım bildirimler sağlama

Sıklıkla adım adım (TBT) navigasyon talimatları sağlayın. güncellenmiş navigasyon bildirimi. Gezinme olarak değerlendirilmesi için bildirimini görürseniz bildirim oluşturucunun takip etmek için:

  1. Bildirimi "devam ediyor" olarak işaretleyin NotificationCompat.Builder.setOngoing yöntemidir.
  2. Bildirimin kategorisini Notification.CATEGORY_NAVIGATION olarak ayarlayın.
  3. Bildirimi şu şekilde genişlet: CarAppExtender.

Ekranın alt kısmındaki demir yolu widget'ında bir gezinme bildirimi gösterilir. araba ekranına gidersiniz. Bildirimin önem düzeyi IMPORTANCE_HIGH, aynı zamanda uyarı bildirimi (HUN) olarak da gösterilir. Önem CarAppExtender.Builder.setImportance yöntemini, bildirim kanalının önemi bu düzenlemelerin nedenlerinden biri.

Uygulama, şurada bir PendingIntent ayarlayabilir: CarAppExtender bunu Kullanıcı HUN veya demiryolu widget'ına dokunduğunda uygulamaya gönderilir.

Eğer NotificationCompat.Builder.setOnlyAlertOnce true değeri ile çağrılır; bu yalnızca yüksek öneme sahip bildirim uyarılarıdır bir kez oldu.

Aşağıdaki snippet'te gezinme bildiriminin nasıl oluşturulacağı gösterilmektedir:

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();

Mesafe için TBT bildirimini düzenli olarak güncelleyin ve bildirimi yalnızca bir HUN olarak görüntüleyecek şekilde güncellenir ve ray widget'ı güncellenir. HUN davranışını kontrol etmek için bildirimin önem derecesini CarAppExtender.Builder.setImportance Projenin önem düzeyini IMPORTANCE_HIGH bir HUN gösteriyor. Ayar yalnızca ray widget'ını günceller.

PlaceList NavigationTemplate içeriğini yenile

Sürücülerin internette gezinirken tek bir düğmeye dokunarak içeriği yenilemesine izin verebilirsiniz mülakatlar için PlaceListNavigationTemplate. Liste yenilemeyi etkinleştirmek için OnContentRefreshListener arayüzün onContentRefreshRequested yöntem ve kullanım PlaceListNavigationTemplate.Builder.setOnContentRefreshListener işleyiciyi şablona göre ayarlayın.

Aşağıdaki snippet'te, şablonda işleyicinin nasıl ayarlanacağı gösterilmektedir:

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();

Yenile düğmesi yalnızca İşleyicinin bir değeri varsa PlaceListNavigationTemplate.

Kullanıcı yenile düğmesini tıkladığında onContentRefreshRequested yönteminiz OnContentRefreshListener uygulaması çağrılır. Şu süre içinde: onContentRefreshRequested, Screen.invalidate yöntemini kullanabilirsiniz. Ardından toplantıyı düzenleyen kullanıcı, Screen.onGetTemplate yenilenmiş içeriğe sahip şablonu alma yöntemini kullanır. Görüntüleyin Şu şablon için bir şablonun içeriğini yenileyin: şablonları yenileme hakkında daha fazla bilgi edinin. Bir sonraki şablonda olduğu sürece iade eden: onGetTemplate, şuna ait: aynı türdeyse bir yenileme olarak sayılır ve şablon kotası.

Sesli yardım sağlayın

Navigasyon yardımını araç hoparlörü üzerinden vermek için uygulamanızın istekte bulunması gerekir ses odağı. AudioFocusRequest, ayarlandı kullanımı AudioAttributes.USAGE_ASSISTANCE_NAVIGATION_GUIDANCE. Ayrıca, odak kazancını AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK olarak ayarlayın.

Gezinmeyi simüle et

Uygulamanızı Google Haberler'e gönderdiğinizde, gezinme işlevselliğini doğrulamak için Google Play Store için kullanıyorsanız, uygulamanızın NavigationManagerCallback.onAutoDriveEnabled geri arama. Bu geri çağırma çağrıldığında uygulamanızın, aşağıdaki işlemler için navigasyonu simüle etmesi gerekir: Kullanıcı navigasyona başladığında seçilen hedef. Uygulamanız bundan çıkabilir mevcut Session yaşam döngüsünde ulaşmak için Lifecycle.Event.ON_DESTROY durumu.

onAutoDriveEnabled uygulamanızın komut satırından şu komutu çalıştırın:

adb shell dumpsys activity service CAR_APP_SERVICE_NAME AUTO_DRIVE

Bu, aşağıdaki örnekte gösterilmektedir:

adb shell dumpsys activity service androidx.car.app.samples.navigation.car.NavigationCarAppService AUTO_DRIVE

Varsayılan navigasyon araç uygulaması

Android Auto'da varsayılan navigasyon araç uygulaması, Kullanıcı tarafından başlatılan navigasyon uygulaması. Varsayılan uygulama Kullanıcı, gezinme niyetini Kullanıcı, Asistan aracılığıyla veya başka bir uygulama navigasyonu başlatma niyetinde olabilir.

Bağlam içi gezinme uyarılarını göster

Alert önemli öğeleri gösterir bağlamdan ayrılmadan isteğe bağlı eylemlerle gezinme ekranına gidin. Sürücüye en iyi deneyimi sunmak için Alert, NavigationTemplate Böylece, navigasyon rotasını engellememek ve sürücünün dikkatini en aza indirmek için kullanabilirsiniz.

Alert, yalnızca NavigationTemplate içinde kullanılabilir. NavigationTemplate alanının dışındaki bir kullanıcıya bildirim göndermek için: aşağıdaki adımları izleyerek bir uyarı bildirimi (HUN) kullanabilirsiniz: Bildirimleri görüntüleyin.

Örneğin, Alert kullanarak şunları yapabilirsiniz:

  • Sürücüye mevcut navigasyonla alakalı bir güncelleme, örneğin Trafik koşullarındaki değişim.
  • Sürücüden mevcut navigasyonla ilgili bir güncelleme yapmasını isteyin. Örneğin: ve hız tuzağının bulunması.
  • Yaklaşan bir görev önerin ve sürücünün bu görevi kabul edip etmediğini sorun. Örneğin, sürücünün yolda birini almaya istekli olup olmadığı.

Alert, temel biçiminde bir başlık ve Alert bölümünden oluşur. süre tahminidir. Süre, ilerleme çubuğuyla gösterilir. İsteğe bağlı olarak, bir alt başlık, bir simge ve en fazla iki tane ekleyebilirsiniz. Action nesne algılandı.

Şekil 2. Bağlam içi gezinme uyarısı.

Alert gösterildikten sonra, sürücü etkileşimi NavigationTemplate alanından ayrılmanıza yol açar. Alert zaman aşımına uğrayana kadar orijinal NavigationTemplate içinde kalır. bir işlem yapar veya uygulama Alert cihazını kapatır.

Uyarı oluştur

Alert.Builder kullanın Alert örneği oluşturmak için:

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 dinlemek istiyorsanız aşağıdaki durumlardan birinde geçerli olan AlertCallback arayüzü. AlertCallback arama yolları şunlardır:

Uyarı süresini yapılandır

Alert süresini seçin: en iyi şekilde yararlanabilirsiniz. Navigasyon için önerilen süre Alert 10 saniye. Navigasyon uyarıları başlıklı makaleyi inceleyin konulu videomuzu izleyin.

Uyarı göster

Alert göstermek için AppManager.showAlert yöntemi aracılığıyla kullanılabilir CarContext.

// Show an alert
carContext.getCarService(AppManager.class).showAlert(alert)
  • Şuna sahip Alert numarasıyla showAlert aranıyor: alertId şu anda ekranda gösterilen Alert kimliğinin kimliğiyle aynı olan hiçbir şey yapmaz. Alert güncellenmiyor. Alert öğelerini güncellemek için yeniden oluşturmanız gerekir bunu yeni bir alertId ile yapabilirsiniz.
  • Farklı bir Alert numarasıyla showAlert aranıyor Şu anda ekranda bulunan Alert öğesine göre alertId şunları kapatır: Şu anda Alert görüntüleniyor.

Uyarıyı kapatma

Alert otomatik olarak kapanırken zaman aşımı veya sürücü etkileşimi nedeniyle, manuel olarak bir Alert (örneğin, bilgileri güncelliğini yitirdiğinde) Bir Alert, dismissAlert yöntemini içeren alertId Alert.

// Dismiss the same alert
carContext.getCarService(AppManager.class).dismissAlert(alert.getId())

Şu anki bilgiyle eşleşmeyen alertId numarasından dismissAlert aranıyor görüntülenen Alert hiçbir şey yapmaz. Bu durum bir istisna değildir.