Navigasyon uygulaması oluşturma

Bu sayfada, Araba Uygulama Kitaplığı'nın adım adım navigasyon uygulamanızın işlevlerini uygulamak için kullanabileceğiniz farklı özellikleri açıklanmaktadır.

Manifest'inizde gezinme desteğini beyan etme

Navigasyon uygulamanız, CarAppService aracının intent filtresinde androidx.car.app.category.NAVIGATION araba uygulaması kategorisini beyan etmelidir:

<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ını destekleme

Sesli sorgu kullanarak Google Asistan'dan gelenler de dahil olmak üzere uygulamanıza yönelik navigasyon amaçlarını desteklemek için uygulamanızın Session.onCreateScreen ve Session.onNewIntent içindeki CarContext.ACTION_NAVIGATE amacını işlemesi gerekir.

Niyetin biçimiyle ilgili ayrıntılar için CarContext.startCarApp ile ilgili dokümanlara bakın.

Gezinme şablonlarına erişme

Gezinme uygulamaları, navigasyon uygulamaları için özel olarak tasarlanmış aşağıdaki şablonlara erişebilir. Tüm bu şablonlar, arka planda haritayla ve aktif navigasyon sırasında adım adım yol tarifiyle birlikte bir yüzey görüntüler.

  • NavigationTemplate: Aktif navigasyon sırasında isteğe bağlı bir bilgi mesajı ve seyahat tahminleri de görüntüler.
  • MapTemplate: Bir listenin (ListTemplate'teki gibi) veya bir bölmenin (PaneTemplate gibi belirgin işlemlerle birlikte ayrıntılı bilgiler içeren) haritanın yanında, kompakt bir sürümünü sunar.
  • PlaceListNavigationTemplate: Ayrıca, yerlerin listesi görüntülenir. Bu listede, karşılık gelen işaretçiler haritada çizilebilir.
  • RoutePreviewNavigationTemplate: Bir rotayı seçip haritada vurgulayabileceğiniz rotaların listesini de görüntüler.

Bu şablonları kullanarak gezinme uygulamanızın kullanıcı arayüzünü tasarlama hakkında daha fazla bilgi için Navigasyon uygulamaları bölümüne bakın.

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

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

Haritayı çizin

Gezinme uygulamaları, haritayı alakalı şablonlar üzerine çizmek için bir Surface öğesine erişebilir.

Böylece AppManager araba hizmetinde SurfaceCallback örneği ayarlanarak SurfaceContainer nesnesine erişilebilir:

Kotlin

carContext.getCarService(AppManager::class.java).setSurfaceCallback(surfaceCallback)

Java

carContext.getCarService(AppManager.class).setSurfaceCallback(surfaceCallback);

SurfaceCallback, Surface özellikleri değiştiğinde diğer geri çağırmalarla birlikte SurfaceContainer kullanılabilir olduğunda bir geri çağırma sağlar.

Yüzeye erişebilmek için uygulamanızın AndroidManifest.xml dosyasında androidx.car.app.ACCESS_SURFACE iznini beyan etmesi gerekir:

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

Haritanın görünür alanı

Ana makine, şablonlar için kullanıcı arayüzü öğelerini haritanın üzerine çizebilir. Ana makine, SurfaceCallback.onVisibleAreaChanged yöntemini çağırarak engellenmemesi ve kullanıcı tarafından tamamen görülebilmesi garanti edilen alanı bildirir. Ayrıca, değişiklik sayısını en aza indirmek için ana makine, geçerli şablona göre her zaman görünen en küçük dikdörtgenle SurfaceCallback.onStableAreaChanged yöntemini çağırır.

Örneğin, bir gezinme uygulamasının üstünde bir işlem şeridi olan NavigationTemplate simgesini kullandığında, kullanıcı bir süre boyunca ekranla etkileşimde bulunmadığında işlem şeridi kendisini gizleyerek haritaya daha fazla yer açabilir. Bu durumda, aynı dikdörtgene sahip onStableAreaChanged ve onVisibleAreaChanged için bir geri çağırma vardır. İşlem şeridi gizlendiğinde, daha büyük alanla yalnızca onVisibleAreaChanged çağrılır. Kullanıcı ekranla etkileşimde bulunursa yine ilk dikdörtgenle yalnızca onVisibleAreaChanged çağrılır.

Koyu modu destekleme

Arabalar için Android uygulama kalitesi bölümünde açıklandığı gibi, ana makine koşulların gerekli olduğunu belirlediğinde navigasyon uygulamaları haritasını Surface örneğine uygun koyu renklerle yeniden çizmelidir.

Koyu renkli bir harita çizip çizmeyeceğinize karar vermek için CarContext.isDarkMode yöntemini kullanabilirsiniz. Koyu mod durumu her değiştiğinde, Session.onCarConfigurationChanged numarasına bir çağrı alırsınız.

Gezinme uygulamaları, ek gezinme meta verilerini ana makineye iletmelidir. Ana makine, araç ana birimine bilgi sağlamak ve navigasyon uygulamalarının paylaşılan kaynaklarla çakışmasını önlemek için bu bilgileri kullanır.

Navigasyon meta verileri, CarContext üzerinden erişilebilen NavigationManager araba hizmeti aracılığıyla sağlanır:

Kotlin

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

Java

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

Navigasyonu başlatma, sonlandırma ve durdurma

Ana makinenin birden çok navigasyon uygulamasını, yönlendirme bildirimlerini ve araç kümesi verilerini yönetebilmesi için mevcut navigasyon durumunu bilmesi gerekir. Kullanıcı navigasyonu başlattığında NavigationManager.navigationStarted numaralı telefonu arayın. Benzer şekilde, navigasyon sona erdiğinde (örneğin, kullanıcı hedefe vardığında veya navigasyonu iptal ettiğinde) NavigationManager.navigationEnded numaralı telefonu arayın.

NavigationManager.navigationEnded hattını yalnızca kullanıcı gezinmeyi bitirdiğinde arayın. Örneğin, bir seyahatin ortasında rotayı yeniden hesaplamanız gerekirse bunun yerine Trip.Builder.setLoading(true) işlevini kullanın.

Bazen ana makinenin, uygulamanız tarafından NavigationManager.setNavigationManagerCallback üzerinden sağlanan bir NavigationManagerCallback nesnesinde navigasyonu ve onStopNavigation çağrılarını durdurmak için bir uygulamaya ihtiyacı vardır. Ardından uygulama, küme ekranında, navigasyon bildirimlerinde ve sesli rehberlikte sonraki dönüş bilgilerini yayınlamayı durdurmalıdır.

Yolculuk bilgilerini güncelle

Etkin navigasyon sırasında NavigationManager.updateTrip numaralı telefonu arayın. Bu görüşmede sağlanan bilgiler araç kümesinde ve uyarı ekranları tarafından kullanılabilir. Sürülen araca bağlı olarak tüm bilgiler kullanıcıya gösterilmez. Örneğin, Masaüstü Ana Birimi (DHU), Trip'a eklenen Step bilgisini gösterir ancak Destination bilgilerini göstermez.

Küme Ekranına Çizim

En etkileyici kullanıcı deneyimini sunmak için aracın küme ekranında temel meta verileri göstermenin ötesine geçmeyi tercih edebilirsiniz. Araba Uygulaması API Düzeyi 6'dan başlayarak, navigasyon uygulamaları aşağıdaki sınırlamalarla kendi içeriklerini doğrudan küme ekranında (desteklenen araçlarda) oluşturma seçeneğine sahiptir:

  • Küme görüntüleme API'si, giriş kontrollerini desteklemiyor
  • Küme ekranı yalnızca harita parçalarını göstermelidir. İsteğe bağlı olarak, bu karolarda aktif rota navigasyonu görüntülenebilir.
  • Küme görüntüleme API'si yalnızca NavigationTemplate kullanımını destekler
    • Ana ekranların aksine küme ekranları, adım adım talimatlar, TVS kartları ve işlemler gibi tüm NavigationTemplate kullanıcı arayüzü öğelerini tutarlı bir şekilde göstermeyebilir. Harita karoları, tutarlı olarak görüntülenen tek kullanıcı arayüzü öğesidir.

Küme Desteğini Bildirme

Ana makine uygulamasına, uygulamanızın küme ekranlarında oluşturmayı desteklediğini bildirmek için CarAppService <intent-filter> öğenize aşağıdaki snippet'te gösterildiği gibi bir androidx.car.app.category.FEATURE_CLUSTER <category> öğesi eklemeniz gerekir:

<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 artık CarAppService::onCreateSession, oluşturulan Session hakkında ek bilgi (yani, görüntüleme türü ve desteklenen şablon grubu) sağlayan SessionInfo türünde bir parametre alır.

Uygulamalar hem kümeyi hem de ana ekranı işlemek için aynı Session sınıfını kullanma veya her bir ekrandaki davranışı özelleştirmek için (aşağıdaki snippet'te gösterildiği gibi) ekrana özel Sessions oluşturma seçeneğine sahiptir.

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 ekranının ne zaman sağlanacağı veya sağlanıp sağlanmayacağı konusunda herhangi bir garanti verilmez ve Session kümesinin tek Session olması da mümkündür (örneğin, kullanıcı uygulamanız aktif olarak gezinirken ana ekranı başka bir uygulamayla değiştirmiştir). "Standart" sözleşmeye göre uygulama, küme görünümü denetimini yalnızca NavigationManager::navigationStarted çağrıldıktan sonra ele alır. Bununla birlikte, etkin gezinme devam ederken uygulamaya küme ekranı sağlanabilir veya küme ekranı hiç gösterilmeyebilir. Uygulamanızın harita karolarının boşta kalma durumunu oluşturarak bu senaryoları yönetmek uygulamanıza bağlıdır.

Ana makine, her Session için ayrı bir bağlayıcı ve CarContext örnek oluşturur. Yani, ScreenManager::push veya Screen::invalidate gibi yöntemler kullanılırken yalnızca bunların çağrıldığı Session etkilenir. Session arası iletişim gerekiyorsa uygulamalar bu örnekler arasında kendi iletişim kanallarını oluşturmalıdır (örneğin, yayınlar, paylaşılan bir tekil veya başka bir şey kullanarak).

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, Masaüstü Ana Birimini ikincil küme görüntüsüne öykünecek şekilde yapılandırarak yapılır. Android Automotive OS'te API düzeyi 30 ve üzeri sürümler için genel sistem görüntüleri, küme ekranını emüle eder.

TravelEstimate'ı metin veya bir simgeyle özelleştirin

Seyahat tahminini metin, simge veya her ikisi ile özelleştirmek için TravelEstimate.Builder sınıfının setTripIcon veya setTripText yöntemlerini kullanın. NavigationTemplate, isteğe bağlı olarak tahmini varış süresi, kalan süre ve kalan mesafenin yanında ya da bunların yerine metin ve simgeleri ayarlamak için TravelEstimate özelliğini kullanır.

Şekil 1. Özel simge ve metin içeren seyahat tahmini.

Aşağıdaki snippet, seyahat tahminini özelleştirmek için setTripIcon ve setTripText değerlerini kullanır:

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ğlayın

Sık güncellenen bir navigasyon bildirimi kullanarak adım adım (TBT) navigasyon talimatları sağlayın. Araba ekranında navigasyon bildirimi olarak değerlendirilmesi için bildiriminizin oluşturucusu aşağıdakileri yapmalıdır:

  1. NotificationCompat.Builder.setOngoing yöntemiyle bildirimi devam ediyor olarak işaretleyin.
  2. Bildirimin kategorisini Notification.CATEGORY_NAVIGATION olarak ayarlayın.
  3. Bildirimin süresini CarAppExtender ile genişletin.

Araba ekranının alt kısmındaki ray widget'ında bir navigasyon bildirimi görüntülenir. Bildirimin önem düzeyi IMPORTANCE_HIGH olarak ayarlanırsa uyarı bildirimi (HUN) olarak da görüntülenir. Önem değeri, CarAppExtender.Builder.setImportance yöntemiyle ayarlanmamışsa bildirim kanalının önemi kullanılır.

Uygulama, kullanıcı HUN simgesine veya ray widget'ına dokunduğunda uygulamaya gönderilen CarAppExtender içinde bir PendingIntent ayarlayabilir.

NotificationCompat.Builder.setOnlyAlertOnce, true değeriyle çağrılırsa son derece önemli bir bildirim uyarısı yalnızca HUN'da bir kez yapılır.

Aşağıdaki snippet'te gezinme bildirimlerinin 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 değişiklikleri için TBT bildirimini düzenli olarak güncelleyin. Bu güncellemeler, demiryolu widget'ını günceller ve bildirimi yalnızca HUN olarak gösterir. CarAppExtender.Builder.setImportance ile bildirimin önemini ayarlayarak HUN davranışını kontrol edebilirsiniz. Önem IMPORTANCE_HIGH olarak ayarlanırsa HUN gösterilir. Başka bir değere ayarlanırsa yalnızca demir yolu widget'ı güncellenir.

PlaceListGezinmeTemplate içeriğini yenileme

Sürücülerin PlaceListNavigationTemplate ile oluşturulan yer listelerine göz atarken tek bir düğmeye dokunarak içeriği yenilemesine olanak tanıyabilirsiniz. Liste yenilemeyi etkinleştirmek için OnContentRefreshListener arayüzünün onContentRefreshRequested yöntemini uygulayın ve şablonda işleyiciyi ayarlamak için PlaceListNavigationTemplate.Builder.setOnContentRefreshListener kullanın.

Aşağıdaki snippet'te işleyicinin şablonda 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 işleyicinin bir değeri varsa PlaceListNavigationTemplate öğesinin başlığında gösterilir.

Kullanıcı yenile düğmesini tıkladığında OnContentRefreshListener uygulamanızın onContentRefreshRequested yöntemi çağrılır. onContentRefreshRequested içinde Screen.invalidate yöntemini çağırın. Ardından ana makine, yenilenmiş içerikle şablonu almak için uygulamanızın Screen.onGetTemplate yöntemini tekrar çağırır. Şablonları yenileme hakkında daha fazla bilgi için Şablonun içeriğini yenileme bölümüne bakın. onGetTemplate tarafından döndürülen bir sonraki şablon aynı türde olduğu sürece yenileme olarak sayılır ve şablon kotasına dahil edilmez.

Sesli rehberlik sağlama

Navigasyon yardımını araç hoparlöründen çalmak için uygulamanızın ses odağı isteğinde bulunması gerekir. AudioFocusRequest kapsamında kullanımı AudioAttributes.USAGE_ASSISTANCE_NAVIGATION_GUIDANCE olarak ayarlayın. Ayrıca odak kazancını AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK olarak ayarlayın.

Gezinmeyi simüle et

Uygulamanızı Google Play Store'a gönderdiğinizde gezinme işlevini doğrulamak için uygulamanızın NavigationManagerCallback.onAutoDriveEnabled geri çağırma işlevini uygulaması gerekir. Bu geri çağırma çağrıldığında uygulamanız, kullanıcı gezinmeye başladığında seçilen hedefe gitmeyi simüle etmelidir. Mevcut Session yaşam döngüsü Lifecycle.Event.ON_DESTROY durumuna ulaştığında uygulamanız bu moddan çıkabilir.

Aşağıdaki komutu bir komut satırından çalıştırarak onAutoDriveEnabled uygulamanızın çağrılıp çağrılmadığını test edebilirsiniz:

adb shell dumpsys activity service CAR_APP_SERVICE_NAME AUTO_DRIVE

Bu, aşağıdaki örnekte gösterilmiştir:

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

Varsayılan navigasyon araba uygulaması

Android Auto'da varsayılan navigasyon araba uygulaması, kullanıcının başlattığı son navigasyon uygulamasına karşılık gelir. Kullanıcı, Asistan aracılığıyla navigasyon komutlarını çağırdığında veya başka bir uygulama navigasyonu başlatmak için bir niyet gönderdiğinde varsayılan uygulama gezinme amaçlarını alır.

Kullanıcıların haritanızla etkileşime girmesine izin verme

Kullanıcıların, yakınlaştırma ve yatay kaydırma yaparak haritanın farklı bölümlerini görmelerini sağlamak gibi, haritalarla etkileşimde bulunmaları için destek ekleyebilirsiniz. Her şablonun farklı minimum Car App API düzeyi şartı vardır. Uygulamak istediğiniz şablonun minimum düzeyi için aşağıdaki tabloya bakın.

ŞablonAraba Uygulaması API Düzeyi'nden itibaren etkileşim destekleniyor
NavigationTemplate2
PlaceListNavigationTemplate4
RoutePreviewNavigationTemplate4
MapTemplate5

SurfaceCallback yöntemleri

SurfaceCallback arayüzünde NavigationTemplate, PlaceListNavigationTemplate, RoutePreviewNavigationTemplate veya MapTemplate şablonlarıyla oluşturulmuş haritalara etkileşim eklemenize olanak tanıyan çeşitli geri çağırma yöntemleri vardır: onClick, onScroll, onScale ve onFling. Bu geri çağırma işlemlerinin kullanıcı etkileşimleriyle olan ilişkisi için aşağıdaki tabloya bakın.

Etkileşim SurfaceCallback yöntem Araba Uygulaması API düzeyinden itibaren desteklenir
Dokunun onClick 5
Yakınlaştırmak için sıkıştırın onScale 2
Tek dokunuşla sürükleme onScroll 2
Tek dokunuşla hızlı kaydırma onFling 2
İki kez dokunma onScale (ölçek faktörü şablon ana makinesi tarafından belirlenir) 2
Kaydırma modunda döner otomatik hatırlatma onScroll (mesafe faktörü şablon ana makinesi tarafından belirlenir) 2

Harita işlem şeridi

NavigationTemplate, PlaceListNavigationTemplate, RoutePreviewNavigationTemplate ve MapTemplate şablonlarında yakınlaştırma ve uzaklaştırma, yeniden ortalama, bir pusulayı görüntüleme gibi haritayla ilgili işlemler ve görüntülemeyi seçtiğiniz diğer işlemler için bir harita işlemi şeridi bulunabilir. Harita işlemi şeridinde, görev derinliğini etkilemeden yenilenebilen dört adet yalnızca simge içeren düğme bulunabilir. Boştayken gizlenir ve etkin durumda yeniden görünür.

Harita etkileşimi geri çağırmaları almak için harita işlemi şeridine bir Action.PAN düğmesi eklemeniz gerekir. Kullanıcı yatay kaydırma düğmesine bastığında, ana makine aşağıdaki bölümde açıklandığı gibi kaydırma moduna girer.

Uygulamanız, harita işlemi şeridindeki Action.PAN düğmesini atlarsa SurfaceCallback yöntemlerinden kullanıcı girişi almaz ve ana makine, daha önce etkinleştirilmiş olan kaydırma modundan çıkar.

Dokunmatik ekranda kaydırma düğmesi gösterilmez.

Kaydırma modu

Kaydırma modunda, şablon ana makinesi çevirmeli kumanda ve dokunmatik alan gibi dokunmatik olmayan giriş cihazlarından kullanıcı girişini uygun SurfaceCallback yöntemlerine çevirir. NavigationTemplate.Builder içindeki setPanModeListener yöntemiyle kaydırma moduna girmek veya bu moddan çıkmak için kullanıcı işlemine yanıt verin. Ana makine, kullanıcı kaydırma modundayken şablondaki diğer kullanıcı arayüzü bileşenlerini gizleyebilir.

Kararlı alan

Sabit alan, boşta ve etkin durumları arasında güncellenir. Haritadaki önemli bilgilerin harita işlem şeridi tarafından engellenmemesi için, ahır alanının boyutuna göre hız, hız sınırı veya yol uyarıları gibi sürüşle ilgili bilgileri çizip çizmeyeceğinizi belirleyin.

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

Alert, gezinme ekranının içeriğinden ayrılmadan isteğe bağlı işlemlerle birlikte sürücüye önemli bilgileri gösterir. Alert, sürücüye en iyi deneyimi sunmak için navigasyon rotasını engellememek ve sürücünün dikkatinin dağılmasını en aza indirmek için NavigationTemplate içinde çalışır.

Alert, yalnızca NavigationTemplate içinde kullanılabilir. Kullanıcıyı NavigationTemplate dışında bilgilendirmek için Bildirimleri gösterme bölümünde açıklandığı gibi bir uyarı bildirimi (HUN) kullanabilirsiniz.

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

  • Sürücüye, trafik koşullarında değişiklik gibi mevcut navigasyonla ilgili bir güncelleme bildirin.
  • Sürücüden mevcut navigasyonla ilgili, hız tuzağı olup olmadığı gibi güncellemeler isteyin.
  • Yaklaşan bir görev önerin ve sürücünün bu görevi kabul edip etmediğini (örneğin, sürücünün yoldan giden birini almaya istekli olup olmadığını) sorun.

Alert, temel biçiminde bir başlık ve Alert süresinden oluşur. Süre, bir ilerleme çubuğuyla gösterilir. İsteğe bağlı olarak bir alt başlık, simge ve en fazla iki Action nesnesi ekleyebilirsiniz.

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

Sürücü etkileşimi nedeniyle NavigationTemplate'dan ayrılan bir Alert gösterildikten sonra başka bir şablona aktarılmaz. Bu öğe, Alert zaman aşımına uğrayana, kullanıcı bir işlem yapana veya uygulama Alert öğesini kapatana kadar orijinal NavigationTemplate konumunda kalır.

Uyarı oluşturma

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

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 iptal veya kapatma işlemini dinlemek istiyorsanız AlertCallback arayüzü uygulayın. AlertCallback çağrı yolları şunlardır:

Uyarı süresini yapılandırma

Uygulamanızın ihtiyaçlarına uygun bir Alert süresi seçin. Gezinme için önerilen süre Alert 10 saniyedir. Daha fazla bilgi için Navigasyon uyarıları konusuna bakın.

Uyarı göster

Bir Alert göstermek için uygulamanızın CarContext üzerinden kullanılabilen AppManager.showAlert yöntemini çağırın.

// Show an alert
carContext.getCarService(AppManager.class).showAlert(alert)
  • Şu anda ekranda bulunan Alert öğesinin kimliğiyle aynı olan alertId öğesine sahip bir Alert ile showAlert çağrıldığında hiçbir işlem yapılmaz. Alert güncellenmez. Alert dosyasını güncellemek için onu yeni bir alertId ile yeniden oluşturmanız gerekir.
  • showAlert öğesi, şu anda ekrandaki Alert öğesinden farklı alertId değerine sahip bir Alert ile çağrıldığında halihazırda görüntülenen Alert kapatılır.

Uyarıları kapatma

Alert, zaman aşımı veya sürücü etkileşimi nedeniyle otomatik olarak kapanır. Dilerseniz bilgilerin güncelliğini yitirmesi gibi durumlarda Alert öğelerini manuel olarak da kapatabilirsiniz. Bir Alert öğesini kapatmak için Alert öğesinin alertId ile dismissAlert yöntemini çağırın.

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

Şu anda görüntülenen Alert ile eşleşmeyen bir alertId ile dismissAlert çağrıldığında hiçbir işlem yapılmaz. Herhangi bir istisnaya neden olmaz.