Bu sayfada, adım adım navigasyon uygulamanızın işlevlerini uygulamak için kullanabileceğiniz Araba Uygulaması Kitaplığı'nın farklı özellikleri açıklanmaktadır.
Manifest'inizde gezinme desteğini beyan edin
Navigasyon uygulamanızın, CarAppService
intent filtresinde androidx.car.app.category.NAVIGATION
araba uygulaması kategorisini beyan etmesi gerekiyor:
<application>
...
<service
...
android:name=".MyNavigationCarAppService"
android:exported="true">
<intent-filter>
<action android:name="androidx.car.app.CarAppService" />
<category android:name="androidx.car.app.category.NAVIGATION"/>
</intent-filter>
</service>
...
</application>
Gezinme amaçlarına yönelik destek
Uygulamanızın, sesli sorgu kullanarak Google Asistan'dan gelenler de dahil olmak üzere navigasyon niyetini desteklemek için Session.onCreateScreen
ve Session.onNewIntent
içinde 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ı, arka planda bir yüzeyi haritayla birlikte görüntüleyen ve etkin navigasyon sırasında adım adım yol tarifi gösteren aşağıdaki şablonlara erişebilir.
NavigationTemplate
: Aktif navigasyon sırasında isteğe bağlı bir bilgi mesajı ve seyahat tahminleri de gösterir.MapWithContentTemplate
: Uygulamanın, bir tür içeriğe sahip harita bloklarını (örneğin, liste) oluşturmasına olanak tanıyan bir şablon. İçerik genellikle harita desenlerinin üzerinde bir bindirme olarak oluşturulur ve harita görünür ve sabit alanlar içeriğe göre ayarlanır.
Bu şablonları kullanarak navigasyon uygulamanızın kullanıcı arayüzünü nasıl tasarlayacağınız hakkında daha fazla bilgi edinmek için Navigasyon uygulamaları başlıklı makaleyi inceleyin.
Gezinme şablonlarına erişmek için uygulamanızın AndroidManifest.xml
dosyasında androidx.car.app.NAVIGATION_TEMPLATES
iznini beyan etmesi gerekir:
<manifest ...>
...
<uses-permission android:name="androidx.car.app.NAVIGATION_TEMPLATES"/>
...
</manifest>
Harita çizmek için ek bir izin gerekiyor.
MapWithContentTemplate'e taşıma
Car App API Düzey 7'den itibaren MapTemplate
,
PlaceListNavigationTemplate
ve RoutePreviewNavigationTemplate
kullanımdan kaldırılmıştır. Desteği sonlandırılan şablonlar desteklenmeye devam edecektir, ancak MapWithContentTemplate
'a taşınması önemle tavsiye edilir.
Bu şablonların sağladığı işlevler, MapWithContentTemplate
kullanılarak uygulanabilir. Örnekler için aşağıdaki snippet'lere bakın:
HaritaŞablonu
Kotlin
// MapTemplate (deprecated) val template = MapTemplate.Builder() .setPane(paneBuilder.build()) .setActionStrip(actionStrip) .setHeader(header) .setMapController(mapController) .build() // MapWithContentTemplate val template = MapWithContentTemplate.Builder() .setContentTemplate( PaneTemplate.Builder(paneBuilder.build()) .setHeader(header) .build()) .setActionStrip(actionStrip) .setMapController(mapController) .build()
Java
// MapTemplate (deprecated) MapTemplate template = new MapTemplate.Builder() .setPane(paneBuilder.build()) .setActionStrip(actionStrip) .setHeader(header) .setMapController(mapController) .build(); // MapWithContentTemplate MapWithContentTemplate template = new MapWithContentTemplate.Builder() .setContentTemplate(new PaneTemplate.Builder(paneBuilder.build()) .setHeader(header) build()) .setActionStrip(actionStrip) .setMapController(mapController) .build();
Yer Listesi Gezinme Şablonu
Kotlin
// PlaceListNavigationTemplate (deprecated) val template = PlaceListNavigationTemplate.Builder() .setItemList(itemListBuilder.build()) .setHeader(header) .setActionStrip(actionStrip) .setMapActionStrip(mapActionStrip) .build() // MapWithContentTemplate val template = MapWithContentTemplate.Builder() .setContentTemplate( ListTemplate.Builder() .setSingleList(itemListBuilder.build()) .setHeader(header) .build()) .setActionStrip(actionStrip) .setMapController( MapController.Builder() .setMapActionStrip(mapActionStrip) .build()) .build()
Java
// PlaceListNavigationTemplate (deprecated) PlaceListNavigationTemplate template = new PlaceListNavigationTemplate.Builder() .setItemList(itemListBuilder.build()) .setHeader(header) .setActionStrip(actionStrip) .setMapActionStrip(mapActionStrip) .build(); // MapWithContentTemplate MapWithContentTemplate template = new MapWithContentTemplate.Builder() .setContentTemplate(new ListTemplate.Builder() .setSingleList(itemListBuilder.build()) .setHeader(header) .build()) .setActionStrip(actionStrip) .setMapController(new MapController.Builder() .setMapActionStrip(mapActionStrip) .build()) .build();
RotaÖnizlemeGezinmeŞablonu
Kotlin
// RoutePreviewNavigationTemplate (deprecated) val template = RoutePreviewNavigationTemplate.Builder() .setItemList( ItemList.Builder() .addItem( Row.Builder() .setTitle(title) .build()) .build()) .setHeader(header) .setNavigateAction( Action.Builder() .setTitle(actionTitle) .setOnClickListener { ... } .build()) .setActionStrip(actionStrip) .setMapActionStrip(mapActionStrip) .build() // MapWithContentTemplate val template = MapWithContentTemplate.Builder() .setContentTemplate( ListTemplate.Builder() .setSingleList( ItemList.Builder() .addItem( Row.Builder() .setTitle(title) .addAction( Action.Builder() .setTitle(actionTitle) .setOnClickListener { ... } .build()) .build()) .build()) .setHeader(header) .build()) .setActionStrip(actionStrip) .setMapController( MapController.Builder() .setMapActionStrip(mapActionStrip) .build()) .build()
Java
// RoutePreviewNavigationTemplate (deprecated) RoutePreviewNavigationTemplate template = new RoutePreviewNavigationTemplate.Builder() .setItemList(new ItemList.Builder() .addItem(new Row.Builder() .setTitle(title)) .build()) .build()) .setHeader(header) .setNavigateAction(new Action.Builder() .setTitle(actionTitle) .setOnClickListener(() -> { ... }) .build()) .setActionStrip(actionStrip) .setMapActionStrip(mapActionStrip) .build(); // MapWithContentTemplate MapWithContentTemplate template = new MapWithContentTemplate.Builder() .setContentTemplate(new ListTemplate.Builder() .setSingleList(new ItemList.Builder() .addItem(new Row.Builder() .setTitle(title)) .addAction(new Action.Builder() .setTitle(actionTitle) .setOnClickListener(() -> { ... }) .build()) .build()) .build())) .setHeader(header) .build()) .setActionStrip(actionStrip) .setMapController(new MapController.Builder() .setMapActionStrip(mapActionStrip) .build()) .build();
Gezinme meta verilerini iletme
Navigasyon uygulamaları, ek navigasyon meta verilerini ana makineye iletmelidir. Ana makine, bu bilgileri araç ana birimine bilgi sağlamak ve navigasyon uygulamalarının paylaşılan kaynaklar üzerinde çakışmasını önlemek için 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
Barındırıcının birden fazla navigasyon uygulamasını, yönlendirme bildirimlerini ve araç kümesi verilerini yönetebilmesi için mevcut navigasyon durumundan haberdar olması gerekir. Kullanıcı navigasyonu başlattığında NavigationManager.navigationStarted
numaralı telefonu arayın.
Benzer şekilde, gezinme sona erdiğinde (örneğin, kullanıcı hedefine ulaştığında veya navigasyonu iptal ettiğinde) NavigationManager.navigationEnded
çağrısı yapın.
NavigationManager.navigationEnded
öğesini yalnızca kullanıcı gezinmeyi bitirdiğinde çağırın. Örneğin, bir yolculuğun ortasında rotayı yeniden hesaplamanız gerekiyorsa bunun yerine Trip.Builder.setLoading(true)
değerini kullanın.
Bazen ana makine, gezinmeyi durdurmak için bir uygulamaya ihtiyaç duyar ve uygulamanızın NavigationManager.setNavigationManagerCallback
aracılığıyla sağladığı bir NavigationManagerCallback
nesnesinde onStopNavigation
komutunu çağırır.
Uygulama daha sonra küme ekranında, navigasyon bildirimlerinde ve sesli yardımda sonraki dönüş bilgilerini yayınlamayı durdurmalıdır.
Gezi bilgilerini güncelleyin
Etkin navigasyon sırasında NavigationManager.updateTrip
numaralı telefonu arayın.
Bu görüşmede sağlanan bilgiler, aracın seti ve uyarı ekranları tarafından kullanılabilir. Sürüşteki araca bağlı olarak, tüm bilgiler kullanıcıya gösterilmez.
Örneğin, Masaüstü Ana Birimi (DHU) Trip
öğesine eklenen Step
değerini gösterir ancak Destination
bilgilerini göstermez.
Küme Ekranına Çizim
En kapsamlı kullanıcı deneyimini sunmak için aracın küme ekranında temel meta verileri göstermenin ötesine geçebilirsiniz. Car App API Düzey 6'dan itibaren 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 görüntüsü 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ı tüm
NavigationTemplate
kullanıcı arayüzü öğelerini (ör. adım adım talimatlar, TVS kartları ve işlemler) tutarlı bir şekilde göstermeyebilir. Harita parçaları, tutarlı şekilde görüntülenen tek kullanıcı arayüzü öğesidir.
- Ana ekranların aksine küme ekranları tüm
Küme Desteğini Bildirme
Ana makine uygulamaya, uygulamanızın küme ekranlarında oluşturmayı desteklediğini bildirmek için aşağıdaki snippet'te gösterildiği gibi CarAppService
cihazınızın <intent-filter>
öğesine 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 itibaren araba uygulaması yaşam döngüsü akışı aynı kalır ancak artık CarAppService::onCreateSession
, oluşturulmakta olan 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 görüntülü reklama özgü Sessions
oluşturma (aşağıdaki snippet'te gösterildiği gibi) 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 görüntüsünün ne zaman veya sağlanacağı ile ilgili herhangi bir garanti verilmez. Ayrıca, 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" anlaşmaya göre uygulama, küme görüntüleme kontrolünü yalnızca NavigationManager::navigationStarted
çağrıldıktan sonra ele alır. Bununla birlikte, uygulamanın etkin bir gezinme yokken küme görünümünün sağlanması veya küme ekranının hiçbir zaman sağlanmaması mümkündür. Uygulamanızın harita blokları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ı bağlayıcı ve CarContext
örnek oluşturur. Bu, ScreenManager::push
veya Screen::invalidate
gibi yöntemleri kullanırken yalnızca çağrıldıkları Session
bundan etkileneceği anlamına gelir. 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 single 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 ikincil küme görüntüsü emüle etmek için Masaüstü Ana Birimini yapılandırarak yapılır. Android Automotive OS'te API düzeyi 30 ve üstü için genel sistem görüntüleri, küme görüntüsü emülasyonu kullanır.
Seyahat tahminini metin veya simge ile özelleştirin
Seyahat tahminini metin, simge veya her ikisi ile özelleştirmek için TravelEstimate.Builder
sınıfının setTripIcon
veya setTripText
yöntemlerini kullanın. NavigationTemplate
, tahmini varış saati, kalan süre ve kalan mesafenin yanında veya yerine isteğe bağlı olarak metin ve simgeleri ayarlamak için TravelEstimate
özelliğini kullanır.
![](https://developer.android.google.cn/training/cars/images/eta-custom-IconText.png?authuser=5&hl=tr)
Aşağıdaki snippet, seyahat tahminini özelleştirmek için setTripIcon
ve setTripText
özelliklerini 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ğlama
Sık güncellenen bir navigasyon bildirimi kullanarak adım adım (TBT) navigasyon talimatları sağlayın. Araç ekranında navigasyon bildirimi olarak işlenmesi için bildirim oluşturucunuzun aşağıdakileri yapması gerekir:
NotificationCompat.Builder.setOngoing
yöntemini kullanarak bildirimi devam ediyor olarak işaretleyin.- Bildirimin kategorisini
Notification.CATEGORY_NAVIGATION
olarak ayarlayın. - Bildirimi
CarAppExtender
ile uzatın.
Araç ekranının altı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österilir.
Önem, CarAppExtender.Builder.setImportance
yöntemiyle ayarlanmazsa bildirim kanalının önemi kullanılır.
Uygulama, kullanıcı HUN veya demir yolu widget'ına dokunduğunda uygulamaya gönderilen CarAppExtender
içinde bir PendingIntent
ayarlayabilir.
NotificationCompat.Builder.setOnlyAlertOnce
, true
değeriyle çağrılırsa yüksek önem düzeyine sahip bildirim yalnızca HUN'da bir kez uyarı verir.
Aşağıdaki snippet'te gezinme bildiriminin nasıl oluşturulacağı gösterilmektedir:
Kotlin
NotificationCompat.Builder(context, NOTIFICATION_CHANNEL_ID) ... .setOnlyAlertOnce(true) .setOngoing(true) .setCategory(NotificationCompat.CATEGORY_NAVIGATION) .extend( CarAppExtender.Builder() .setContentTitle(carScreenTitle) ... .setContentIntent( PendingIntent.getBroadcast( context, ACTION_OPEN_APP.hashCode(), Intent(ACTION_OPEN_APP).setComponent( ComponentName(context, MyNotificationReceiver::class.java)), 0)) .setImportance(NotificationManagerCompat.IMPORTANCE_HIGH) .build()) .build()
Java
new NotificationCompat.Builder(context, NOTIFICATION_CHANNEL_ID) ... .setOnlyAlertOnce(true) .setOngoing(true) .setCategory(NotificationCompat.CATEGORY_NAVIGATION) .extend( new CarAppExtender.Builder() .setContentTitle(carScreenTitle) ... .setContentIntent( PendingIntent.getBroadcast( context, ACTION_OPEN_APP.hashCode(), new Intent(ACTION_OPEN_APP).setComponent( new ComponentName(context, MyNotificationReceiver.class)), 0)) .setImportance(NotificationManagerCompat.IMPORTANCE_HIGH) .build()) .build();
Mesafe değişiklikleri için TBT bildirimini düzenli olarak güncelleyin. Bu bildirim, tren widget'ını güncelleyip bildirimi yalnızca HUN olarak gösterir.
HUN davranışını, CarAppExtender.Builder.setImportance
ile bildirimin önem derecesini ayarlayarak kontrol edebilirsiniz. Önem değeri IMPORTANCE_HIGH
olarak
ayarlandığında HUN gösterilir. Bunu başka bir değere ayarlamak yalnızca tren 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 dokunuşla içeriği yenilemelerini sağlayabilirsiniz.
Liste yenilemeyi etkinleştirmek için OnContentRefreshListener
arayüzünün onContentRefreshRequested
yöntemini uygulayın ve işleyiciyi şablonda ayarlamak üzere PlaceListNavigationTemplate.Builder.setOnContentRefreshListener
kullanın.
Aşağıdaki snippet'te, şablonda işleyicinin nasıl ayarlanacağı gösterilmektedir:
Kotlin
PlaceListNavigationTemplate.Builder() ... .setOnContentRefreshListener { // Execute any desired logic ... // Then call invalidate() so onGetTemplate() is called again invalidate() } .build()
Java
new PlaceListNavigationTemplate.Builder() ... .setOnContentRefreshListener(() -> { // Execute any desired logic ... // Then call invalidate() so onGetTemplate() is called again invalidate(); }) .build();
Yenile düğmesi yalnızca 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.
Daha sonra 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 bu yenilenme olarak sayılır ve şablon kotasına dahil edilmez.
Sesli yardım sağlayın
Navigasyon yardımını araç hoparlörü üzerinden oynatmak 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ğırmasını uygulaması gerekir. Bu geri çağırma çağrıldığında, kullanıcı navigasyonu başlattığında uygulamanızın seçilen hedefe giden yolu simüle etmesi gerekir. Mevcut Session
yaşam döngüsünün 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österilmektedir:
adb shell dumpsys activity service androidx.car.app.samples.navigation.car.NavigationCarAppService AUTO_DRIVE
Varsayılan navigasyon araç uygulaması
Android Auto'da, varsayılan navigasyon araç uygulaması, kullanıcı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şlatma niyeti gönderdiğinde, varsayılan uygulama gezinme amaçları alır.
Bağlam içi gezinme uyarılarını göster
Alert
, gezinme ekranının bağlamından ayrılmadan isteğe bağlı işlemlerle sürücüye önemli bilgileri gösterir. Sürücüye en iyi deneyimi sunmak amacıyla Alert
, navigasyon rotasını engellememek 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 bir yerden bilgilendirmek için Bildirimleri görüntüleme bölümünde açıklandığı şekilde bir uyarı bildirimi (HUN) kullanabilirsiniz.
Örneğin, Alert
kullanarak şunları yapabilirsiniz:
- Mevcut navigasyonla ilgili bir güncelleme (ör. trafik koşullarındaki bir değişiklik) hakkında sürücüye bilgi verin.
- Sürücüden mevcut navigasyonla ilgili bir güncelleme (ör. hız tuzağı olması) isteyin.
- Yaklaşan bir görev önerin ve sürücünün bunu kabul edip etmediğini (örneğin, sürücünün yolda birini almak isteyip istemediğini) sorun.
Temel biçiminde Alert
, bir başlık ve Alert
süre zamanından oluşur. Süre, ilerleme çubuğuyla gösterilir. İsteğe bağlı olarak bir alt başlık, simge ve en fazla iki Action
nesnesi ekleyebilirsiniz.
![](https://developer.android.google.cn/training/cars/images/CarAppLib-Alert.png?authuser=5&hl=tr)
Alert
gösterildikten sonra, sürücü etkileşiminin NavigationTemplate
etiketinden ayrılmasıyla sonuçlanıyorsa öğe 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
içinde kalır.
Uyarı oluştur
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
iptali veya kapatma işlemini 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 düzenleyen,
Action.OnClickListener
numaralı telefonu, ardındanAlertCallback.onDismiss
numaralı telefonu arar.Alert
desteklenmiyorsa barındırıcı,AlertCallback.REASON_NOT_SUPPORTED
değerini kullanarakAlertCallback.onCancel
öğesini çağırır.Alert
gösterilmediği için düzenleyen,AlertCallback.onDismiss
yöntemini çağırmıyor.
Uyarı süresini yapılandır
Uygulamanızın ihtiyaçlarına uygun bir Alert
süresi seçin. Gezinme Alert
için önerilen süre 10 saniyedir. Daha fazla bilgi için Navigasyon uyarıları
bölümüne bakın.
Uyarı göster
Alert
göstermek için uygulamanızın CarContext
aracılığıyla kullanılabilen AppManager.showAlert
yöntemini çağırın.
// Show an alert
carContext.getCarService(AppManager.class).showAlert(alert)
- Şu anda teşhirde olan
Alert
cihazının kimliğiyle aynı olanalertId
birAlert
ileshowAlert
çağrısı yapıldığında herhangi bir şey olmaz.Alert
güncellenmiyor. BirAlert
öğesini güncellemek için yeni biralertId
ile yeniden oluşturmanız gerekir. showAlert
çağrısı, şu anda ekranda gösterilenAlert
öğesinden farklıalertId
olan birAlert
ile çağrıldığında, görüntülenmekte olanAlert
kapatılır.
Uyarıyı kapatma
Bir Alert
, zaman aşımı veya sürücü etkileşimi nedeniyle otomatik olarak kapansa da Alert
öğesini (örneğin, bilgilerin güncel olmaması gibi) 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
üzerinden dismissAlert
çağrısının yapılması herhangi bir şey sağlamaz. Bu durum bir istisna değildir.