Halaman ini menjelaskan berbagai fitur Library Aplikasi Mobil yang dapat Anda gunakan untuk menerapkan fungsi aplikasi navigasi belokan demi belokan.
Mendeklarasikan dukungan navigasi dalam manifes Anda
Aplikasi navigasi Anda harus mendeklarasikan
kategori aplikasi mobil androidx.car.app.category.NAVIGATION
dalam filter intent
CarAppService
-nya:
<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>
Mendukung intent navigasi
Untuk mendukung intent navigasi ke aplikasi Anda, termasuk intent yang berasal dari
Asisten Google menggunakan kueri suara, aplikasi Anda perlu menangani
intent CarContext.ACTION_NAVIGATE
dalam
Session.onCreateScreen
dan
Session.onNewIntent
-nya.
Lihat dokumentasi terkait
CarContext.startCarApp
untuk detail tentang format intent.
Mengakses template navigasi
Aplikasi navigasi dapat mengakses template berikut yang dirancang khusus untuk aplikasi navigasi. Semua template ini menampilkan platform di latar belakang dengan peta dan, selama navigasi aktif, rute belokan demi belokan.
NavigationTemplate
: juga menampilkan pesan informasi opsional dan estimasi perjalanan selama navigasi aktif.MapTemplate
: menyajikan versi daftar yang ringkas (seperti dalamListTemplate
) atau panel (informasi mendetail dengan tindakan yang jelas, seperti dalamPaneTemplate
) di samping peta.PlaceListNavigationTemplate
: juga menampilkan daftar tempat, yang dapat digambar dengan penanda yang sesuai di peta.RoutePreviewNavigationTemplate
: juga menampilkan daftar rute yang salah satunya dapat dipilih dan ditandai di peta.
Untuk detail selengkapnya terkait cara mendesain antarmuka pengguna aplikasi navigasi menggunakan template tersebut, lihat panduan desain Library Aplikasi Android untuk Mobil.
Untuk mendapatkan akses ke template navigasi, aplikasi Anda harus mendeklarasikan
izin androidx.car.app.NAVIGATION_TEMPLATES
di
file AndroidManifest.xml
-nya:
<uses-permission android:name="androidx.car.app.NAVIGATION_TEMPLATES"/>
Menggambar peta
Aplikasi navigasi dapat mengakses Surface
untuk menggambar peta pada template yang relevan.
Objek SurfaceContainer
kemudian dapat
diakses dengan menyetel instance SurfaceCallback
ke layanan
mobil AppManager
:
Kotlin
carContext.getCarService(AppManager::class.java).setSurfaceCallback(surfaceCallback)
Java
carContext.getCarService(AppManager.class).setSurfaceCallback(surfaceCallback);
SurfaceCallback
memberikan callback saat SurfaceContainer
tersedia bersama dengan callback lainnya saat properti Surface
berubah.
Untuk mendapatkan akses ke platform, aplikasi Anda harus mendeklarasikan
izin androidx.car.app.ACCESS_SURFACE
dalam file AndroidManifest.xml
-nya:
<uses-permission android:name="androidx.car.app.ACCESS_SURFACE"/>
Area peta yang terlihat
Host dapat menggambar elemen antarmuka pengguna untuk template di atas
peta. Host mengomunikasikan area yang dipastikan tanpa halangan
dan sepenuhnya terlihat oleh pengguna dengan memanggil
metode
SurfaceCallback.onVisibleAreaChanged
. Selain itu, untuk meminimalkan jumlah perubahan, host memanggil
metode SurfaceCallback.onStableAreaChanged
dengan kotak terkecil yang selalu terlihat berdasarkan
template saat ini.
Misalnya, saat aplikasi navigasi menggunakan
NavigationTemplate
dengan strip tindakan di atasnya, strip tindakan tersebut dapat menyembunyikan dirinya sendiri ketika pengguna
tidak berinteraksi dengan layar untuk beberapa saat guna membuat lebih banyak ruang untuk peta. Dalam
hal ini, ada callback ke onStableAreaChanged
dan
onVisibleAreaChanged
dengan kotak yang sama. Jika strip tindakan disembunyikan,
hanya onVisibleAreaChanged
yang dipanggil dengan area yang lebih besar. Jika pengguna
berinteraksi dengan layar, sekali lagi hanya onVisibleAreaChanged
yang dipanggil dengan
kotak pertama.
Mendukung mode gelap
Aplikasi navigasi harus menggambar ulang peta ke instance Surface
dengan
warna gelap yang sesuai saat diperlukan oleh kondisi yang ditentukan host, seperti
yang dijelaskan dalam
kualitas aplikasi Android untuk mobil.
Untuk memutuskan apakah Anda akan menggambar peta gelap, Anda dapat menggunakan
metode
CarContext.isDarkMode
. Setiap kali status mode gelap berubah, Anda menerima panggilan ke
Session.onCarConfigurationChanged
.
Menyampaikan metadata navigasi
Aplikasi navigasi harus mengomunikasikan metadata navigasi tambahan dengan host. Host menggunakan informasi tersebut untuk menyediakan informasi bagi head unit kendaraan dan untuk mencegah bentrok antar-aplikasi navigasi yang menggunakan resource bersama.
Metadata navigasi disediakan melalui
layanan mobil NavigationManager
yang dapat diakses dari
CarContext
:
Kotlin
val navigationManager = carContext.getCarService(NavigationManager::class.java)
Java
NavigationManager navigationManager = carContext.getCarService(NavigationManager.class);
Memulai, mengakhiri, dan menghentikan navigasi
Agar dapat mengelola beberapa aplikasi navigasi, notifikasi pemilihan rute,
dan data cluster kendaraan, host harus mengetahui status navigasi
saat ini. Saat pengguna memulai navigasi, panggil
NavigationManager.navigationStarted
.
Demikian pula, saat navigasi berakhir, misalnya saat pengguna tiba
di tujuan atau pengguna membatalkan navigasi, panggil
NavigationManager.navigationEnded
.
Hanya panggil NavigationManager.navigationEnded
saat pengguna selesai menavigasi. Misalnya, jika Anda perlu menghitung ulang
rute di tengah perjalanan, gunakan
Trip.Builder.setLoading(true)
sebagai gantinya.
Terkadang, host memerlukan aplikasi untuk menghentikan navigasi dan memanggil
onStopNavigation
dalam
objek NavigationManagerCallback
yang disediakan oleh aplikasi Anda melalui
NavigationManager.setNavigationManagerCallback
.
Aplikasi harus berhenti menampilkan informasi belokan berikutnya dalam tampilan cluster,
notifikasi navigasi, dan panduan suara.
Memperbarui informasi perjalanan
Selama navigasi aktif, panggil
NavigationManager.updateTrip
.
Informasi yang diberikan dalam panggilan ini dapat digunakan oleh cluster kendaraan dan
heads-up display. Bergantung pada kendaraan tertentu yang dikemudikan, tidak semua
informasi ditampilkan kepada pengguna.
Misalnya, Head Unit Desktop (DHU) menampilkan
Step
yang ditambahkan ke
Trip
, tetapi tidak menampilkan
informasi
Destination
.
Menggambar ke Layar Cluster
Untuk memberikan pengalaman pengguna yang paling imersif, Anda mungkin tidak hanya menampilkan metadata dasar di layar cluster kendaraan. Mulai dari Car App API Level 6, aplikasi navigasi memiliki opsi untuk merender konten mereka sendiri secara langsung di layar cluster (di kendaraan yang didukung), dengan batasan berikut:
- Cluster display API tidak mendukung kontrol input
- Layar cluster hanya boleh menampilkan kartu peta. Navigasi rute aktif dapat secara opsional ditampilkan di petak ini.
- Cluster display API hanya mendukung penggunaan
NavigationTemplate
- Tidak seperti layar utama, layar cluster mungkin tidak secara konsisten menampilkan semua
elemen UI
NavigationTemplate
, seperti petunjuk belokan demi belokan, kartu PWT, dan tindakan. Petak peta adalah satu-satunya elemen UI yang ditampilkan secara konsisten.
- Tidak seperti layar utama, layar cluster mungkin tidak secara konsisten menampilkan semua
elemen UI
Mendeklarasikan Dukungan Cluster
Untuk memberi tahu aplikasi host bahwa aplikasi Anda mendukung rendering pada layar
cluster, Anda harus menambahkan elemen androidx.car.app.category.FEATURE_CLUSTER
<category>
ke <intent-filter>
CarAppService
seperti yang ditunjukkan di bagian
cuplikan berikut:
<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>
Siklus Proses dan Pengelolaan Status
Mulai API level 6,
alur siklus proses
aplikasi mobil tetap sama, tetapi sekarang CarAppService::onCreateSession
mengambil parameter
jenis SessionInfo
yang memberikan
informasi tambahan tentang Session
yang sedang dibuat (yaitu, jenis layar
dan kumpulan template yang didukung).
Aplikasi memiliki opsi untuk menggunakan class Session
yang sama untuk menangani
layar cluster dan layar utama, atau membuat Sessions
khusus layar untuk menyesuaikan
perilaku pada setiap layar (seperti yang ditunjukkan dalam cuplikan berikut).
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(); } }
Tidak ada jaminan terkait kapan atau apakah layar cluster akan disediakan.
Selain itu, ada kemungkinan cluster Session
akan menjadi satu-satunya Session
(misalnya, pengguna menukar layar utama ke aplikasi lain saat aplikasi Anda
bernavigasi secara aktif). Perjanjian "standar"-nya adalah bahwa aplikasi mendapatkan kontrol
layar cluster hanya setelah NavigationManager::navigationStarted
dipanggil. Namun, aplikasi dapat menyediakan layar cluster
saat tidak ada navigasi aktif yang muncul, atau tidak pernah diberikan layar
cluster. Aplikasi Anda dapat menangani skenario ini dengan merender status tidak ada aktivitas pada petak peta aplikasi Anda.
Host membuat binder dan instance CarContext
yang terpisah per Session
. Artinya, saat menggunakan metode seperti ScreenManager::push
atau
Screen::invalidate
, hanya Session
tempat metode tersebut dipanggil yang
akan terpengaruh. Aplikasi harus membuat saluran komunikasi sendiri antara instance
ini jika komunikasi lintas Session
diperlukan (misalnya, dengan menggunakan
siaran, singleton bersama, atau sesuatu
lainnya).
Menguji Dukungan Cluster
Anda dapat menguji implementasinya di Android Auto dan Android Automotive OS. Untuk Android Auto, pengujian ini dilakukan dengan mengonfigurasi Desktop Head Unit untuk mengemulasikan layar cluster sekunder. Untuk Android Automotive OS, Generic System Image (GSI) untuk level API 30 dan yang lebih tinggi akan mengemulasikan layar cluster.
Menyesuaikan TravelEstimate dengan teks atau ikon
Untuk menyesuaikan estimasi perjalanan dengan teks, ikon, atau keduanya, gunakan
setTripIcon
class
TravelEstimate.Builder
atau
metode
setTripText
. NavigationTemplate
menggunakan
TravelEstimate
untuk menyetel teks dan ikon secara opsional, atau sebagai pengganti perkiraan waktu
tiba, waktu tersisa, dan jarak tersisa.

Cuplikan berikut menggunakan setTripIcon
dan setTripText
untuk menyesuaikan estimasi perjalanan:
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();
Menyediakan notifikasi belokan demi belokan
Menyediakan petunjuk navigasi belokan demi belokan (TBT) menggunakan notifikasi navigasi yang sering diperbarui. Agar diperlakukan sebagai notifikasi navigasi di layar mobil, builder notifikasi Anda harus melakukan hal berikut:
- Tandai notifikasi sebagai sedang berlangsung
dengan metode
NotificationCompat.Builder.setOngoing
. - Tetapkan kategori notifikasi ke
Notification.CATEGORY_NAVIGATION
. - Perluas notifikasi dengan
CarAppExtender
.
Notifikasi navigasi ditampilkan di widget kolom samping di bagian bawah
layar mobil. Jika tingkat kepentingan notifikasi disetel ke
IMPORTANCE_HIGH
, notifikasi juga ditampilkan sebagai notifikasi peringatan dini (HUN).
Jika nilai penting tidak ditetapkan dengan
metode
CarAppExtender.Builder.setImportance
,
nilai penting saluran notifikasi
digunakan.
Aplikasi dapat menyetel PendingIntent
di
CarAppExtender
yang
dikirim ke aplikasi saat pengguna mengetuk HUN atau widget kolom samping.
Jika
NotificationCompat.Builder.setOnlyAlertOnce
dipanggil dengan nilai true
, notifikasi dengan nilai penting yang tinggi dikirim hanya
sekali di HUN.
Cuplikan berikut ini menunjukkan cara membuat notifikasi navigasi:
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();
Memperbarui notifikasi TBT secara teratur untuk perubahan
jarak, yang memperbarui widget kolom samping, dan hanya menampilkan notifikasi sebagai HUN.
Anda dapat mengontrol perilaku HUN dengan menetapkan nilai penting notifikasi dengan
CarAppExtender.Builder.setImportance
. Menetapkan nilai penting ke
IMPORTANCE_HIGH
akan menampilkan HUN. Menetapkannya
ke nilai lain hanya akan memperbarui widget kolom samping.
Memuat ulang konten PlaceListNavigationTemplate
Anda dapat mengizinkan pengemudi memuat ulang konten dengan mengetuk tombol saat menjelajahi
daftar tempat yang dibuat dengan
PlaceListNavigationTemplate
.
Untuk mengaktifkan pemuatan ulang daftar, implementasikan
metode
onContentRefreshRequested
antarmuka OnContentRefreshListener
, dan gunakan
PlaceListNavigationTemplate.Builder.setOnContentRefreshListener
untuk menetapkan pemroses pada template.
Cuplikan berikut menunjukkan cara menetapkan pemroses pada template:
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();
Tombol muat ulang hanya ditampilkan dalam header
PlaceListNavigationTemplate
jika pemroses memiliki nilai.
Saat pengguna mengklik tombol muat ulang, metode
onContentRefreshRequested
dari implementasi
OnContentRefreshListener
Anda akan dipanggil. Dalam
onContentRefreshRequested
, panggil
metode Screen.invalidate
.
Host kemudian memanggil kembali ke metode
Screen.onGetTemplate
aplikasi untuk mengambil template dengan konten yang dimuat ulang. Lihat
Memuat ulang konten template untuk
informasi selengkapnya tentang memuat ulang template. Selama template berikutnya
yang ditampilkan oleh
onGetTemplate
memiliki
jenis yang sama, template tersebut dianggap sebagai pemuatan ulang dan tidak dihitung dalam
kuota template.
Memberikan panduan audio
Untuk memutar panduan navigasi melalui speaker mobil, aplikasi Anda harus meminta
fokus audio. Sebagai bagian dari
AudioFocusRequest
, setel
penggunaan sebagai AudioAttributes.USAGE_ASSISTANCE_NAVIGATION_GUIDANCE
. Selain itu,
tetapkan peningkatan fokus sebagai AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK
.
Menyimulasikan navigasi
Untuk memverifikasi fungsi navigasi aplikasi Anda saat mengirimkannya ke
Google Play Store, aplikasi Anda harus menerapkan
callback
NavigationManagerCallback.onAutoDriveEnabled
. Saat callback ini dipanggil, aplikasi Anda harus menyimulasikan navigasi ke
tujuan yang dipilih saat pengguna memulai navigasi. Aplikasi Anda dapat keluar dari
mode ini setiap kali siklus proses Session
saat ini mencapai
status
Lifecycle.Event.ON_DESTROY
.
Anda dapat menguji apakah implementasi onAutoDriveEnabled
dipanggil dengan
menjalankan perintah berikut dari command line:
adb shell dumpsys activity service CAR_APP_SERVICE_NAME AUTO_DRIVE
Hal ini ditunjukkan dalam contoh berikut:
adb shell dumpsys activity service androidx.car.app.samples.navigation.car.NavigationCarAppService AUTO_DRIVE
Aplikasi mobil navigasi default
Di Android Auto, aplikasi mobil navigasi default sesuai dengan aplikasi navigasi terakhir yang diluncurkan pengguna. Aplikasi default menerima intent navigasi saat pengguna memanggil perintah navigasi melalui Asisten atau saat aplikasi lain mengirim intent untuk memulai navigasi.
Memungkinkan pengguna berinteraksi dengan peta Anda
Anda dapat menambahkan dukungan bagi pengguna untuk berinteraksi dengan peta, seperti mengizinkan mereka melihat berbagai bagian peta dengan memperbesar/memperkecil dan menggeser. Setiap template memiliki persyaratan minimum yang berbeda untuk API Level Aplikasi Mobil. Lihat tabel berikut untuk level minimum template yang ingin Anda implementasikan.
Template | Interaktivitas yang didukung sejak API Level Aplikasi Mobil |
---|---|
NavigationTemplate | 2 |
PlaceListNavigationTemplate | 4 |
RoutePreviewNavigationTemplate | 4 |
MapTemplate | 5 |
Metode SurfaceCallback
Antarmuka SurfaceCallback
memiliki beberapa
metode callback yang memungkinkan Anda menambahkan interaktivitas ke peta yang dibuat dengan template
NavigationTemplate
, PlaceListNavigationTemplate
, RoutePreviewNavigationTemplate
, atau MapTemplate
:
onClick
,
onScroll
,
onScale
,
dan
onFling
.
Lihat tabel berikut untuk mengetahui kaitan callback ini dengan interaksi pengguna.
Interaksi | Metode SurfaceCallback |
Didukung sejak API level Aplikasi Mobil |
---|---|---|
Ketuk | onClick |
5 |
Cubit untuk zoom | onScale |
2 |
Tarik dengan satu sentuhan | onScroll |
2 |
Ayunkan jari dengan satu sentuhan | onFling |
2 |
Ketuk dua kali | onScale (dengan faktor skala yang ditentukan oleh host template) |
2 |
Sentuhan putar dalam mode geser | onScroll (dengan faktor jarak yang ditentukan oleh host template) |
2 |
Strip tindakan peta
Template
NavigationTemplate
,
PlaceListNavigationTemplate
,
RoutePreviewNavigationTemplate
,
dan MapTemplate
dapat memiliki strip tindakan peta untuk tindakan terkait peta seperti memperbesar
dan memperkecil, memusatkan kembali, menampilkan kompas, dan tindakan lain yang Anda pilih
untuk ditampilkan. Strip tindakan peta dapat memiliki hingga empat tombol khusus ikon yang dapat
dimuat ulang tanpa memengaruhi kedalaman tugas. Strip tindakan peta
disembunyikan selama status tidak ada aktivitas dan muncul kembali saat status aktif.
Untuk menerima callback interaktivitas peta, Anda harus menambahkan
tombol Action.PAN
di strip tindakan peta. Ketika pengguna menekan tombol geser, host akan memasuki
mode geser, seperti yang dijelaskan di bagian berikut.
Jika aplikasi Anda menghilangkan tombol Action.PAN
di strip tindakan peta, aplikasi tidak akan menerima input pengguna dari
metode SurfaceCallback
, dan host keluar dari mode geser
yang diaktifkan sebelumnya.
Di layar sentuh, tombol geser tidak ditampilkan.
Mode geser
Dalam mode geser, host template menerjemahkan input pengguna dari perangkat input non-sentuh,
seperti pengontrol putar dan touchpad, ke metode
SurfaceCallback
yang sesuai. Tanggapi tindakan pengguna untuk masuk atau keluar dari mode geser
dengan metode
setPanModeListener
di NavigationTemplate.Builder
. Host dapat menyembunyikan komponen UI lainnya
di template saat pengguna berada dalam mode geser.
Area stabil
Area stabil diperbarui antara status tidak ada aktivitas dan aktif. Tentukan apakah harus mengambil informasi terkait mengemudi seperti kecepatan, batas kecepatan, atau peringatan jalan, berdasarkan ukuran area stabil, sehingga informasi penting pada peta tidak tertutup oleh strip tindakan peta.
Menampilkan notifikasi navigasi dalam konteks
Alert
menampilkan informasi
penting kepada pengemudi dengan tindakan opsional‐tanpa keluar dari
konteks layar navigasi. Untuk memberikan pengalaman terbaik kepada pengemudi,
Alert
berfungsi di dalam
NavigationTemplate
untuk menghindari pemblokiran rute navigasi dan untuk meminimalkan gangguan bagi pengemudi.
Alert
hanya tersedia dalam NavigationTemplate
.
Untuk memberi tahu pengguna di luar NavigationTemplate
,
pertimbangkan untuk menggunakan notifikasi peringatan dini (HUN) seperti yang dijelaskan dalam
Menampilkan notifikasi.
Misalnya, gunakan Alert
untuk:
- Memberi tahu pengemudi tentang informasi terbaru yang relevan dengan navigasi saat ini, seperti perubahan kondisi lalu lintas.
- Meminta pengemudi untuk memberikan informasi terbaru terkait navigasi saat ini, seperti adanya alat pengukur kecepatan.
- Mengusulkan tugas mendatang dan menanyakan apakah pengemudi menerimanya, seperti apakah pengemudi bersedia menjemput seseorang dalam perjalanan mereka.
Dalam bentuk dasarnya, Alert
terdiri dari judul dan waktu durasi
Alert
. Waktu durasi direpresentasikan oleh status progres. Jika ingin,
Anda dapat menambahkan subtitel, ikon, dan maksimal dua objek
Action
.

Setelah ditampilkan, Alert
tidak akan dibawa ke template lain jika
interaksi pengemudi membuat NavigationTemplate
ditinggalkan.
Data tetap dalam versi NavigationTemplate
asli hingga waktu tunggu Alert
habis, pengguna mengambil tindakan, atau aplikasi menutup Alert
.
Membuat notifikasi
Gunakan Alert.Builder
untuk membuat instance Alert
:
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();
Jika Anda ingin memproses
pembatalan atau penutupan Alert
, buat implementasi antarmuka
AlertCallback
.
Jalur panggilan AlertCallback
adalah:
Jika waktu tunggu
Alert
habis, host akan memanggil metodeAlertCallback.onCancel
dengan nilaiAlertCallback.REASON_TIMEOUT
. Kemudian, metodeAlertCallback.onDismiss
akan dipanggil.Jika pengemudi mengklik salah satu tombol tindakan, host akan memanggil
Action.OnClickListener
lalu memanggilAlertCallback.onDismiss
.Jika
Alert
tidak didukung, host akan memanggilAlertCallback.onCancel
dengan nilaiAlertCallback.REASON_NOT_SUPPORTED
. Host tidak memanggilAlertCallback.onDismiss
, karenaAlert
tidak ditampilkan.
Mengonfigurasi durasi notifikasi
Pilih durasi Alert
yang
sesuai dengan kebutuhan aplikasi Anda. Durasi yang direkomendasikan untuk navigasi
Alert
adalah 10 detik. Baca
pedoman desain Library Aplikasi Android untuk Mobil
guna mengetahui informasi selengkapnya.
Menampilkan notifikasi
Untuk menampilkan Alert
, panggil metode AppManager.showAlert
yang tersedia melalui CarContext
aplikasi Anda.
// Show an alert
carContext.getCarService(AppManager.class).showAlert(alert)
- Memanggil
showAlert
denganAlert
yang memilikialertId
sama dengan IDAlert
yang saat ini ditampilkan, tidak akan mengakibatkan apa pun.Alert
tidak dapat diupdate. Untuk mengupdateAlert
, Anda harus membuatnya ulang denganalertId
baru. - Memanggil
showAlert
denganAlert
yang memilikialertId
berbeda denganAlert
yang saat ini ditampilkan akan menutupAlert
yang saat ini ditampilkan.
Menutup notifikasi
Meskipun Alert
otomatis ditutup
karena waktu tunggu habis atau interaksi pengemudi, Anda juga dapat menutup
Alert
secara manual, seperti jika informasinya sudah tidak berlaku. Untuk menutup
Alert
, panggil metode
dismissAlert
dengan
alertId
dari Alert
.
// Dismiss the same alert
carContext.getCarService(AppManager.class).dismissAlert(alert.getId())
Memanggil dismissAlert
dengan alertId
yang tidak cocok dengan Alert
yang saat ini
ditampilkan, tidak akan mengakibatkan apa pun. Perintah ini tidak memberikan pengecualian.