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 meta verilerini iletme
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.
- Ana ekranların aksine küme ekranları, adım adım talimatlar, TVS kartları ve işlemler gibi tüm
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.
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:
NotificationCompat.Builder.setOngoing
yöntemiyle bildirimi devam ediyor olarak işaretleyin.- Bildirimin kategorisini
Notification.CATEGORY_NAVIGATION
olarak ayarlayın. - 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.
Şablon | Araba Uygulaması API Düzeyi'nden itibaren etkileşim destekleniyor |
---|---|
NavigationTemplate | 2 |
PlaceListNavigationTemplate | 4 |
RoutePreviewNavigationTemplate | 4 |
MapTemplate | 5 |
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.
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:
Alert
zaman aşımına uğrarsa ana makineAlertCallback.REASON_TIMEOUT
değeriyleAlertCallback.onCancel
yöntemini çağırır. Daha sonraAlertCallback.onDismiss
yöntemini çağırır.Sürücü işlem düğmelerinden birini tıklarsa ana makine
Action.OnClickListener
kodunu arar ve ardındanAlertCallback.onDismiss
çağrısını yapar.Alert
desteklenmiyorsa ana makine,AlertCallback.REASON_NOT_SUPPORTED
değeriyleAlertCallback.onCancel
çağrısını yapar.Alert
gösterilmediği için ana makineAlertCallback.onDismiss
adresini çağırmıyor.
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ı olanalertId
öğesine sahip birAlert
ileshowAlert
çağrıldığında hiçbir işlem yapılmaz.Alert
güncellenmez.Alert
dosyasını güncellemek için onu yeni biralertId
ile yeniden oluşturmanız gerekir. showAlert
öğesi, şu anda ekrandakiAlert
öğesinden farklıalertId
değerine sahip birAlert
ile çağrıldığında halihazırda görüntülenenAlert
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.