Navigasyon uygulaması oluşturma

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

Manifest'inizde gezinme desteği tanımlayın

Navigasyon uygulamanızın CarAppService amaç filtresinde androidx.car.app.category.NAVIGATION araba uygulaması kategorisini belirtmesi 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"/>
      </intent-filter>
    </service>
    ...
</application>

Gezinme amaçlarını destekleme

Sesli sorgu kullanan Google Asistan'dan gelenler de dahil olmak üzere uygulamanızda 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

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

  • NavigationTemplate: Ayrıca, aktif navigasyon sırasında isteğe bağlı bir bilgi mesajı ve seyahat tahminleri görüntüler.
  • MapTemplate: Bir listenin (ListTemplate'teki gibi) veya bir bölmenin (PaneTemplate'da olduğu gibi belirgin işlemlerle birlikte ayrıntılı bilgiler) haritanın yanında, kompakt bir sürümünü gösterir.
  • PlaceListNavigationTemplate: Ayrıca, harita üzerinde çizilmiş ilgili işaretçilere sahip olabilecek yer listesi de görüntüler.
  • RoutePreviewNavigationTemplate: Ayrıca, seçilebilen ve haritada vurgulanabilen rotaların bir listesini 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.

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

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

Haritayı çiz

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

Ardından, AppManager araba hizmetinde SurfaceCallback örneği ayarlanarak bir 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.

Uygulamanızın yüzeye erişebilmek için 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ıya tamamen görünür olması 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ı üst kısmında bir işlem şeridi olan NavigationTemplate simgesini kullandığında, kullanıcı bir süredir ekranla etkileşimde bulunmazsa işlem şeridi haritada daha fazla yer açmak için kendini gizleyebilir. Bu örnekte, 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 ilk dikdörtgenle yine yalnızca onVisibleAreaChanged çağrılır.

Koyu modu destekleme

Arabalar için Android uygulaması kalitesinde açıklandığı gibi, ana makine koşulların gerekli olduğunu belirlediğinde navigasyon uygulamaları Surface örneğine uygun koyu renklerle haritasını 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.

Navigasyon 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 üzerinden 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 fazla 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, gezinme sona erdiğinde (örneğin, kullanıcı hedefe vardığında veya kullanıcı navigasyonu iptal ettiğinde) NavigationManager.navigationEnded numaralı telefonu arayın.

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

Bazen sunucu, navigasyonu ve NavigationManager.setNavigationManagerCallback aracılığıyla uygulamanız tarafından sağlanan bir NavigationManagerCallback nesnesinde onStopNavigation öğesini çağıracak bir uygulamaya ihtiyaç duyar. Ardından uygulama, küme ekranında, navigasyon bildirimlerinde ve sesli yardımda sonraki dönüş bilgilerini yayınlamayı durdurmalıdır.

Yolculuk bilgilerini güncelle

Aktif navigasyon sırasında NavigationManager.updateTrip numaralı telefonu arayın. Bu görüşmede sağlanan bilgiler aracın gösterge panelinde ve uyarı ekranlarında 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'e eklenen Step bilgisini gösterir ancak Destination bilgisini 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çebilirsiniz. Car App API Seviye 6'dan başlayarak, navigasyon uygulamaları aşağıdaki sınırlamalara tabi olarak 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ında yalnızca harita desenleri gösterilmelidir. Bu döşemelerde, isteğe bağlı olarak etkin bir rota navigasyonu görüntülenebilir.
  • Cluster display API yalnızca NavigationTemplate kullanımını destekler
    • Ana ekranların aksine küme ekranlarında adım adım talimatlar, TVS kartları ve işlemler gibi tüm NavigationTemplate kullanıcı arayüzü öğeleri tutarlı bir şekilde gösterilmeyebilir. Harita desenleri, tutarlı olarak görüntülenen tek kullanıcı arayüzü öğesidir.

Küme Desteğini Bildirme

Uygulamanızın küme ekranlarında oluşturmayı desteklediğini ana makine uygulamasına bildirmek için CarAppService'inizin <intent-filter> öğesine 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ı şekilde kalır ancak artık CarAppService::onCreateSession, oluşturulan Session hakkında ek bilgi (yani, görüntülü reklam 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 özgü 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ğlandığı veya sağlanıp sağlanmadığı 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 uygulama ile değiştirmiştir). Uygulamanın, küme ekranının kontrolünü yalnızca NavigationManager::navigationStarted çağrıldıktan sonra ele geçirmesi "standart" anlaşmaya göre belirlenir. Ancak etkin gezinme devam etmezken uygulamanın küme ekranının sağlanabilmesi veya hiçbir zaman küme ekranının sağlanmaması mümkündür. Uygulamanızın boşta kalma durumunu harita desenlerini oluşturarak bu senaryoları ele almak uygulamanıza bağlıdır.

Ana makine, her Session için ayrı bağlayıcı ve CarContext örnek oluşturur. Yani ScreenManager::push veya Screen::invalidate gibi yöntemler kullanılırken yalnızca çağrıldıkları Session etkilenir. Session arası iletişim gerekliyse 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 yöntem kullanarak).

Küme Desteğini Test Etme

Uygulamanızı hem Android Auto'da hem de Android Automotive OS'te test edebilirsiniz. Android Auto'da bu işlem, Masaüstü Ana Birimini ikincil küme ekranını emüle edecek şekilde yapılandırarak yapılır. Android Automotive OS'te API düzeyi 30 ve sonraki sürümler için genel sistem görüntüleri, küme görüntüsünü emüle eder.

TravelEstimate'i metin veya 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ına ya da yerine metin ve simgeler ayarlamak için TravelEstimate özelliğini kullanır.

Şekil 1. Özel simge ve metinle 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 navigasyon bildirimlerini kullanarak adım adım (TBT) navigasyon talimatları sağlayın. Araç ekranında navigasyon bildirimi olarak değerlendirilmesi için bildiriminizi oluşturucunun aşağıdakileri yapması gerekir:

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

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

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

NotificationCompat.Builder.setOnlyAlertOnce, true değeriyle çağrılırsa yüksek önem düzeyine sahip bildirim, HUN'da yalnızca bir kez uyarı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üncelleme, 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 ray widget'ını günceller.

PlaceList NavigationTemplate içeriğini yenile

Sürücülerin PlaceListNavigationTemplate ile oluşturulan yerlerin listelerine göz atarken tek bir düğmeye dokunarak içeriği yenilemelerine olanak tanıyabilirsiniz. Liste yenileme özelliğini 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 için onContentRefreshRequested yöntemi çağrılır. onContentRefreshRequested içinde Screen.invalidate yöntemini çağırın. Ardından ana makine, yenilenen içeriğe sahip şablonu almak için uygulamanızın Screen.onGetTemplate yöntemini geri çağırır. Şablonları yenileme hakkında daha fazla bilgi edinmek 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 yardım sağla

Navigasyon yardımını araç hoparlörlerinden ç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ı navigasyona başladığında seçilen hedefe gitmeyi simüle etmelidir. Mevcut Session öğesinin yaşam döngüsü Lifecycle.Event.ON_DESTROY durumuna ulaştığında uygulamanız bu moddan çıkabilir.

Bir komut satırından aşağıdaki komutu ç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 üzerinden navigasyon komutlarını çağırdığında veya başka bir uygulama navigasyonu başlatma niyeti 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ılara, yakınlaştırma ve yatay kaydırma yaparak haritanın farklı bölümlerini görmelerini sağlamak gibi, haritalarla etkileşimde bulunma desteği ekleyebilirsiniz. Her şablonun farklı bir minimum Car App API düzeyi gereksinimi vardır. Uygulamak istediğiniz şablonun minimum düzeyi için aşağıdaki tabloya bakın.

ŞablonAraba Uygulaması API Düzeyi'nden bu yana etkileşim desteklenir
NavigationTemplate2
PlaceListNavigationTemplate4
RoutePreviewNavigationTemplate4
MapTemplate 5

SurfaceCallback yöntemleri

SurfaceCallback arayüzünde NavigationTemplate, PlaceListNavigationTemplate, RoutePreviewNavigationTemplate veya MapTemplate şablonlarıyla oluşturulmuş haritalara etkileşim özelliği eklemenize olanak tanıyan çeşitli geri çağırma yöntemleri vardır: onClick, onScroll, onScale ve onFling. Bu geri çağırmaların 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ızla sallama 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 ve istediğiniz diğer işlemler gibi haritayla ilgili işlemler için bir harita işlemi şeridi bulunabilir. Harita işlem şeridinde, görev derinliğini etkilemeden yenilenebilen dört adet yalnızca simge içeren düğme bulunabilir. Boşta kalma durumunda 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 yatay kaydırma moduna girer.

Uygulamanız, harita işlemi şeridindeki Action.PAN düğmesini atlarsa SurfaceCallback yöntemlerinden kullanıcı girişini 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 kumandalar ve dokunmatik alan gibi dokunmatik olmayan giriş cihazlarındaki kullanıcı girişlerini 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 sabit alanın boyutuna göre hız, hız sınırı veya yol uyarıları gibi sürüşle ilgili bilgilerin çizilip çizilmeyeceğini belirleyin.

Bağlam içi gezinme uyarılarını görüntüle

Alert, gezinme ekranının içeriğinden ayrılmadan, isteğe bağlı işlemler yaparak önemli bilgileri sürücüye gösterir. Sürücüye en iyi deneyimi sunmak için Alert, navigasyon rotasının engellenmesini önlemek ve sürücünün dikkatini 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örüntüleme bölümünde açıklandığı gibi uyarı bildirimi (HUN) kullanmayı düşünebilirsiniz.

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

  • Sürücüye, trafik koşullarındaki bir değişiklik gibi mevcut gezinmeyle ilgili bir güncellemeyi bildirin.
  • Sürücüden mevcut navigasyonla ilgili son durumu (ör. hız tuzağının olup olmadığı) 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 yolda başka birini almaya istekli olup olmadığını) sorun.

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

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

Gösterilen Alert, sürücü etkileşiminin NavigationTemplate öğesinden ayrılmasıyla sonuçlanıyorsa başka bir şablona aktarılmaz. 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 iptalini veya kapatılmasını dinlemek istiyorsanız AlertCallback arayüzünün bir uygulamasını oluşturun. AlertCallback arama yolları şunlardır:

Uyarı süresini yapılandırma

Uygulamanızın ihtiyaçlarına uygun bir Alert süresi seçin. Navigasyon Alert için önerilen süre 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 olan Alert öğesinin kimliğiyle aynı olan alertId öğesine sahip bir Alert ile showAlert çağrıldığında herhangi bir işlem yapılmaz. Alert güncellenmez. Alert öğesini güncellemek için yeni bir alertId ile yeniden oluşturmanız gerekir.
  • showAlert öğesi, şu anda ekranda olan Alert öğesinden farklı alertId değerine sahip bir Alert ile çağrıldığında halihazırda gösterilen Alert kapatılır.

Bir uyarıyı kapatma

Alert, zaman aşımı veya sürücü etkileşimi nedeniyle otomatik olarak kapanır. Bununla birlikte, bilgilerinin 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österilen Alert ile eşleşmeyen bir alertId ile dismissAlert çağrıldığında bir şey olmaz. Herhangi bir istisna oluşturmaz.