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.
Gezinme meta verilerini iletme
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.
- Ana ekranların aksine küme ekranlarında adım adım talimatlar, TVS kartları ve işlemler gibi tüm
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.
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:
NotificationCompat.Builder.setOngoing
yöntemiyle bildirimi devam ediyor olarak işaretleyin.- Bildirimin kategorisini
Notification.CATEGORY_NAVIGATION
olarak ayarlayın. - 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.
Şablon | Araba Uygulaması API Düzeyi'nden bu yana etkileşim desteklenir |
---|---|
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 ö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.
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:
Alert
zaman aşımına uğrarsa ana makine,AlertCallback.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
çağrısı yapar ve ardındanAlertCallback.onDismiss
yöntemini çağırır.Alert
desteklenmiyorsa ana makine,AlertCallback.REASON_NOT_SUPPORTED
değeriyleAlertCallback.onCancel
çağrısı yapar.Alert
gösterilmediği için ana makineAlertCallback.onDismiss
çağırmıyor.
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ı olanalertId
öğesine sahip birAlert
ileshowAlert
çağrıldığında herhangi bir işlem yapılmaz.Alert
güncellenmez.Alert
öğesini güncellemek için yeni biralertId
ile yeniden oluşturmanız gerekir. showAlert
öğesi, şu anda ekranda olanAlert
öğesinden farklıalertId
değerine sahip birAlert
ile çağrıldığında halihazırda gösterilenAlert
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.