1. Sebelum memulai
Codelab ini mengajarkan Anda cara membuat aplikasi Android sederhana yang menggunakan Google Maps Platform Navigation SDK untuk menavigasi ke tujuan yang telah dikonfigurasi sebelumnya.
Seperti inilah tampilan aplikasi Anda saat selesai.

Prasyarat
- Pengetahuan dasar tentang pengembangan Aplikasi Android di Kotlin
- Beberapa pemahaman tentang konsep dasar Google Maps SDK seperti peta, lokasi, koordinat.
Yang akan Anda pelajari
- Cara membuat aplikasi Android sederhana yang menggunakan Navigation SDK untuk menavigasi ke tujuan.
- Cara mengintegrasikan Navigation SDK dari repositori Maven Google jarak jauh
- Cara mengelola izin akses lokasi dan perjanjian pengguna dengan persyaratan pengguna akhir Navigation SDK
- Cara menginisialisasi SDK
- Cara menetapkan tujuan dan memulai panduan navigasi.
Yang Anda butuhkan
- Versi stabil terbaru Android Studio telah diinstal. Codelab ini dibuat menggunakan Android Studio Jellyfish. Jika Anda menggunakan versi yang berbeda, tampilan dan tata letak antarmuka serta komponennya mungkin berbeda.
- Akun Google dan Project dengan penagihan diaktifkan.
- Perangkat Android dalam mode Developer dengan proses debug USB diaktifkan, atau emulator Android. Apa pun yang Anda pilih, harus memenuhi persyaratan minimum untuk Navigation SDK
2. Memulai persiapan
Jika Anda belum memiliki akun Google Cloud Platform dan project dengan penagihan diaktifkan, siapkan project Google Cloud Anda dengan mengikuti petunjuk Memulai Google Maps Platform di https://developers.google.com/maps/gmp-get-started
Pilih project Google Cloud Anda di konsol
Di Cloud Console, klik menu drop-down project, lalu pilih project yang ingin Anda gunakan untuk codelab ini.

Mengaktifkan Navigation SDK di project Anda
Aktifkan API dan SDK Google Maps Platform yang diperlukan untuk codelab ini di Google Cloud Marketplace.
Buka APIs & Services > Library di Konsol Google Cloud, lalu telusuri "Navigation SDK".
Anda akan melihat satu hasil penelusuran.

Klik hasil Navigation SDK untuk membuka halaman Detail Produk. Klik tombol Aktifkan untuk mengaktifkan SDK di project Anda.
Ulangi proses ini untuk Google Maps SDK for Android.
Membuat kunci API
Buat kunci API di halaman Kredensial di Cloud Console. Anda dapat mengikuti langkah-langkah di langkah 3 bagian panduan memulai di Memulai Google Maps Platform. Semua permintaan ke Google Maps Platform memerlukan kunci API.
3. Mendapatkan file project contoh
Bagian ini menjelaskan cara menyiapkan project Android Studio kosong dasar dengan meng-clone file dari repositori GitHub untuk codelab ini. Repo GitHub berisi versi sebelum dan sesudah kode codelab. Codelab akan dimulai dengan template project kosong dan dibangun hingga status selesai. Anda dapat menggunakan project yang telah selesai di repo sebagai referensi jika mengalami kesulitan.
Clone repo GitHub ini untuk mendapatkan kode codelab ini.
git clone https://github.com/googlemaps-samples/codelab-navigation-101-android-kotlin.git
Jika Anda belum menginstal git, klik tombol ini untuk mendapatkan kode:
Untuk membantu Anda memulai secepatnya, repositori ini berisi beberapa kode awal di folder Starter untuk membantu Anda mengikuti codelab ini. Project awal menyediakan UI aplikasi dan konfigurasi build dasar, tetapi tidak memiliki Navigation SDK yang ditambahkan ke dalamnya. Ada juga project Solution yang sudah selesai jika Anda ingin langsung melihatnya atau memeriksa progres Anda kapan saja.
Membuka repo yang di-clone di Android Studio
Setelah meng-clone repo secara lokal, gunakan Android Studio untuk membuka folder Starter sebagai project yang ada.
- Dari dialog Welcome to Android Studio, klik tombol Open.
- Buka folder tempat Anda menyimpan repo yang di-clone, lalu pilih folder
Starterdi dalam folder "codelab-navigation-101-android-kotlin" tingkat teratas. - Periksa apakah project dibuat dan berjalan.
Tambahkan perangkat virtual, atau hubungkan perangkat hardware
Untuk menghubungkan perangkat Android ke komputer, ikuti petunjuk Android Studio tentang cara Menjalankan aplikasi di perangkat hardware. Atau, Anda dapat mengonfigurasi perangkat virtual menggunakan Android Virtual Device (AVD) Manager. Saat memilih emulator, pastikan Anda memilih image yang berisi Google API.
Di Android Studio, klik opsi menu Run atau ikon tombol putar. Pilih perangkat saat diminta.
4. Menambahkan Navigation SDK ke aplikasi Anda
Menambahkan library Navigation SDK dan kunci API ke project Anda
Untuk menambahkan library Navigation SDK ke aplikasi, Anda harus mengubah build.gradle.kts tingkat aplikasi untuk mengambil Navigation SDK dari repositori Maven Google dan mengonfigurasi nomor versi.
Buat variabel dalam konfigurasi build untuk menyimpan nomor versi Navigation SDK.
Siapkan variabel di build.gradle.kts tingkat aplikasi untuk memuat nilai versi Navigation SDK yang digunakan di aplikasi Anda, sehingga Anda dapat dengan mudah beralih ke versi terbaru di masa mendatang.
Periksa catatan rilis Navigation SDK untuk mengetahui nomor versi terbaru.
val navSdkVersion by extra("6.0.0")
Anda juga dapat mengubah nilai variabel ini dan variabel lainnya menggunakan dialog yang ada di File > Project Structure > Variables:

Menambahkan dependensi ke konfigurasi build
Sekarang tambahkan dependensi API berikut ke blok dependensi di build.gradle.kts. tingkat aplikasi. Versi yang digunakan akan menjadi nilai ${navSdkVersion} yang baru saja Anda tetapkan di build.gradle.kts tingkat aplikasi:
dependencies {
// Include the Google Navigation SDK.
api("com.google.android.libraries.navigation:navigation:${navSdkVersion}")
...
Tambahkan kunci API Anda
Menggunakan plugin Secrets Gradle untuk mengelola kunci API
Sebaiknya gunakan plugin Secrets Gradle untuk mengelola kunci API di aplikasi Anda secara aman. Plugin ini telah ditambahkan ke template project awal sebagai dependensi dalam file build.gradle.kts tingkat teratas Anda.
// Top-level build file where you can add configuration options common to all sub-projects/modules.
plugins {
id("com.google.android.libraries.mapsplatform.secrets-gradle-plugin") version "2.0.1" apply false
//... other plugin definitions here
}
Buka file secrets.properties di direktori tingkat teratas, lalu ganti YOUR_API_KEY dengan kunci API Anda. Simpan kunci Anda dalam file ini karena secrets.properties tidak di-check in ke dalam sistem kontrol versi.
MAPS_API_KEY=YOUR_API_KEY
Untuk mengetahui informasi selengkapnya tentang topik ini, lihat Menambahkan kunci API ke aplikasi Anda dalam dokumentasi Navigation SDK.
Verifikasi konten local.defaults.properties
Project kosong juga berisi file local.defaults.properties di direktori tingkat teratas, folder yang sama dengan file secrets.properties. Buka dan amati kode berikut.
MAPS_API_KEY=DEFAULT_API_KEY
File ini ada untuk memberikan nilai cadangan untuk properti MAPS_API_KEY jika secrets.properties tidak ditambahkan ke project, sehingga build tidak gagal. Anda tidak perlu mengedit file ini. Jika definisi secrets.properties dari MAPS_API_KEY tidak ditemukan, nilai default akan menghentikan aplikasi yang berjalan saat runtime, dengan error kunci API.
Periksa apakah Manifes Android menggunakan kunci API yang Anda tentukan
Buka app/src/main/AndroidManifest.xml. Anda akan melihat bahwa properti MAPS_API_KEY digunakan untuk menyetel kunci API untuk aplikasi:
<meta-data
android:name="com.google.android.geo.API_KEY"
android:value="${MAPS_API_KEY}" />
Buka file build.gradle.kts tingkat aplikasi Anda dan temukan properti secrets.
Setelan propertiesFileName plugin harus disetel ke secrets.properties, dan defaultPropertiesFileName harus membaca local.defaults.properties.
secrets {
// Optionally specify a different file name containing your secrets.
// The plugin defaults to "local.properties"
propertiesFileName = "secrets.properties"
// A properties file containing default secret values. This file can be
// checked in version control.
defaultPropertiesFileName = "local.defaults.properties"
}
Simpan semua file dan sinkronkan project Anda dengan Gradle.
5. Mengonfigurasi izin aplikasi dan menambahkan UI dasar
Meminta izin akses lokasi presisi
Navigation SDK bergantung pada sinyal GPS agar dapat berfungsi, sehingga aplikasi Anda harus meminta pengguna untuk memberikan akses ke data lokasi presisi. Tambahkan izin untuk mengakses lokasi presisi sebagai turunan elemen <manifest> di AndroidManifest.xml.
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" >
<uses-permission
android:name="android.permission.ACCESS_FINE_LOCATION"
/>
</manifest>
Anda dapat membaca selengkapnya tentang izin akses lokasi Android di bagian Meminta izin akses lokasi pada dokumentasi developer Android.
Untuk menjalankan aplikasi Anda di perangkat Android 14, minta izin Akses Lokasi Layanan Latar Depan dengan menambahkan tag uses-permission berikut di lokasi yang sama dengan izin akses lokasi presisi:
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_LOCATION" />
Menambahkan aktivitas peluncuran dengan UI dasar
Saat berjalan, aplikasi Anda akan memerlukan kode yang dieksekusi selama proses mulai untuk memeriksa apakah pengguna telah memberikan izin untuk mengakses lokasinya, dan menangani setiap kemungkinan skenario, dengan meminta izin jika belum diberikan. Untuk melakukannya, tambahkan antarmuka pengguna dasar ke aplikasi Anda. Codelab ini menggunakan UI yang dibuat saat Anda membuat aktivitas Views kosong baru di Android Studio. Anda akan menyesuaikannya untuk melakukan pemeriksaan izin akses lokasi sebelum menambahkan kode ke aktivitas untuk UI navigasi.
Buka file MainActivity.kt di editor kode dan periksa kode, yang menampilkan UI dasar.
Meminta izin akses lokasi saat runtime
Aplikasi Anda harus memicu permintaan untuk mengakses lokasi presisi sebelum Navigation SDK diinisialisasi.
Untuk memastikan pemeriksaan ini terjadi saat aplikasi Anda dimulai, tambahkan beberapa kode ke class MainActivity, dalam metode onCreate() yang diganti di Aktivitas Anda.
Kode berikut akan memeriksa apakah pengguna telah memberikan izin akses lokasi akurat. Jika tidak, kode ini akan meminta izin. Tambahkan kode ini di dalam metode onCreate() Anda.
val permissions =
if (VERSION.SDK_INT >= VERSION_CODES.TIRAMISU) {
arrayOf(permission.ACCESS_FINE_LOCATION, permission.POST_NOTIFICATIONS)
} else {
arrayOf(permission.ACCESS_FINE_LOCATION)
}
if (permissions.any { !checkPermissionGranted(it) }) {
if (permissions.any { shouldShowRequestPermissionRationale(it) }) {
// Display a dialogue explaining the required permissions.
}
val permissionsLauncher =
registerForActivityResult(
RequestMultiplePermissions(),
{ permissionResults ->
if (permissionResults.getOrDefault(permission.ACCESS_FINE_LOCATION, false)) {
onLocationPermissionGranted()
} else {
finish()
}
},
)
permissionsLauncher.launch(permissions)
} else {
android.os.Handler(Looper.getMainLooper()).postDelayed({ onLocationPermissionGranted() }, SPLASH_SCREEN_DELAY_MILLIS)
}
}
private fun checkPermissionGranted(permissionToCheck: String): Boolean =
ContextCompat.checkSelfPermission(this, permissionToCheck) == PackageManager.PERMISSION_GRANTED
Tambahkan fungsi baru ke class MainActivity, yang disebut onLocationPermissionGranted, yang akan menangani hasil saat pengguna memberikan izin untuk membagikan lokasinya. Pada langkah berikutnya, kita akan menambahkan kode di sini untuk meluncurkan aktivitas navigasi baru.
private fun onLocationPermissionGranted() {
//code to initialize Navigation SDK will go here
}
Bangun project Anda. Jika ada error build, temukan dan perbaiki error tersebut.
Jalankan project Anda di perangkat virtual baru. Anda akan melihat dialog permintaan izin muncul saat aplikasi diinstal dan dimulai.
6. Menambahkan antarmuka pengguna navigasi
Ada dua cara untuk menambahkan UI Navigasi: SupportNavigationFragment atau NavigationView.
Untuk mempermudah, codelab menggunakan NavigationView.
Mengedit tata letak
Edit res/layout/activity_main.xml untuk menambahkan tata letak untuk NavigationView.
- Buka file dan beralih ke tampilan Kode.
- Ganti seluruh konten file dengan tata letak baru
NavigationViewdi dalamRelativeLayoutseperti pada contoh di bawah. Karena Anda hanya akan menambahkan tampilan navigasi ke aplikasi, tata letak sederhana sudah cukup. - Beri NavigationView Anda ID "
@+id/navigation_view".
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.google.android.libraries.navigation.NavigationView
android:id="@+id/navigation_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
</RelativeLayout>
Menyiapkan aktivitas Navigation
Di Android Studio, buka file MainActivity.kt di editor.
Tambahkan beberapa kode penyiapan dasar untuk memastikan pengalaman navigasi berfungsi dengan benar di aplikasi Anda. Di file MainActivity.kt, lakukan perubahan berikut:
- Deklarasikan variabel di class
MainActivityuntuk mereferensikanNavigationView:
private lateinit var navView: NavigationView
- Tambahkan beberapa kode ke metode
onCreate()untuk mendapatkan referensi keNavigationViewAnda:
navView = findViewById(R.id.navigation_view)
navView.onCreate(savedInstanceState)
- Tambahkan beberapa kode ke metode
onCreate()untuk memastikan layar tetap aktif selama panduan navigasi:
// Ensure the screen stays on during nav.
window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)
- Edit kode yang memanggil
ViewCompat.setOnApplyWindowInsetsListeneruntuk mereferensikan IDNavigationViewAnda.
ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.navigation_view)) { v, insets ->
val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars())
v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom)
insets
}
- Tambahkan metode
showToast()ke class untuk menampilkan masukan kepada pengguna:
private fun showToast(errorMessage: String) {
Toast.makeText(this@MainActivity, errorMessage, Toast.LENGTH_LONG).show()
}
7. Menginisialisasi Navigation SDK
Setelah menyelesaikan penyiapan aktivitas Navigasi dasar, Anda dapat melakukan inisialisasi Navigation SDK. Untuk melakukannya, tambahkan kode berikut ke file MainActivity.kt Anda:
/** Starts the Navigation API, capturing a reference when ready. */
@SuppressLint("MissingPermission")
private fun initializeNavigationApi() {
NavigationApi.getNavigator(
this,
object : NavigatorListener {
override fun onNavigatorReady(navigator: Navigator) {
// store a reference to the Navigator object
mNavigator = navigator
// code to start guidance will go here
}
override fun onError(@NavigationApi.ErrorCode errorCode: Int) {
when (errorCode) {
NavigationApi.ErrorCode.NOT_AUTHORIZED -> {
// Note: If this message is displayed, you may need to check that
// your API_KEY is specified correctly in AndroidManifest.xml
// and is been enabled to access the Navigation API
showToast(
"Error loading Navigation API: Your API key is " +
"invalid or not authorized to use Navigation."
)
}
NavigationApi.ErrorCode.TERMS_NOT_ACCEPTED -> {
showToast(
"Error loading Navigation API: User did not " +
"accept the Navigation Terms of Use."
)
}
else -> showToast("Error loading Navigation API: $errorCode")
}
}
},
)
}
Kode ini membuat metode baru bernama initializeNavigationApi(). Metode ini mendapatkan referensi ke objek Navigator dengan memanggil NavigationApi.getNavigator() dan menerapkan NavigatorListener untuk menangani callback.
Perhatikan bahwa saat Navigation API diinisialisasi, metode NavigationListener.onNavigatorReady akan dipanggil, dengan objek Navigator yang diteruskan sebagai parameter. Kode di atas akan memperbarui variabel mNavigator yang Anda deklarasikan sebelumnya dengan objek Navigator yang diinisialisasi dan diteruskan ke metode ini.
Terakhir, tambahkan panggilan ke metode initializeNavigationApi dari metode onLocationPermissionGranted.
private fun onLocationPermissionGranted() {
initializeNavigationApi()
}
8. Menambahkan pemroses untuk peristiwa navigasi utama
Saat pengguna Anda mengikuti panduan, Navigation SDK akan memicu peristiwa yang dapat memberi tahu aplikasi tentang perubahan status penting di sepanjang rute, seperti saat pengguna mengubah rute atau tiba di tujuan. Di file MainActivity.kt, tambahkan pemroses untuk menangani peristiwa ini:
- Dalam class
MainActivity, deklarasikan dua variabel untuk merujuk ke objek pemroses peristiwa:
private var arrivalListener: Navigator.ArrivalListener? = null
private var routeChangedListener: Navigator.RouteChangedListener? = null
- Tambahkan metode
registerNavigationListeners()untuk menyiapkan pemroses saat Navigator diinisialisasi. Metode ini memanggilNavigator.clearDestinations()untuk meresetNavigationViewsaat peristiwa Kedatangan diaktifkan:
/**
* Registers a number of example event listeners that show an on screen message when certain
* navigation events occur (e.g. the driver's route changes or the destination is reached).
*/
private fun registerNavigationListeners() {
withNavigatorAsync {
arrivalListener =
Navigator.ArrivalListener { // Show an onscreen message
showToast("User has arrived at the destination!")
mNavigator?.clearDestinations()
}
mNavigator?.addArrivalListener(arrivalListener)
routeChangedListener =
Navigator.RouteChangedListener { // Show an onscreen message when the route changes
showToast("onRouteChanged: the driver's route changed")
}
mNavigator?.addRouteChangedListener(routeChangedListener)
}
}
- Tambahkan panggilan ke
registerNavigationListeners()dari kode callbackonNavigatorReadydalam metodeinitializeNavigationApi:
override fun onNavigatorReady(navigator: Navigator) {
// store a reference to the Navigator object
mNavigator = navigator
//listen for events en route
registerNavigationListeners()
}
- Konfigurasi antarmuka pengguna. Anda dapat mengontrol berbagai aspek antarmuka pengguna navigasi saat panduan sedang berjalan. Salah satu penyesuaian penting adalah posisi kamera. Tambahkan panggilan ke metode
setTaskRemovedBehaviourdari objeknavigatoryang ditampilkan dionNavigatorReadysebagai berikut. Tindakan ini akan menghentikan panduan dan notifikasi jika aplikasi ditutup dengan menggeser:
// Disables the guidance notifications and shuts down the app and background service
// when the user dismisses/swipes away the app from Android's recent tasks.
navigator.setTaskRemovedBehavior(Navigator.TaskRemovedBehavior.QUIT_SERVICE)
- Tambahkan panggilan ke
GoogleMap.followMyLocationuntuk menentukanCameraPerspective.GoogleMapdiakses melalui metodeNavigatorView.getMapAsync()sebagai berikut:
navView.getMapAsync {
googleMap ->
googleMap.followMyLocation(GoogleMap.CameraPerspective.TILTED)
}
- Untuk memastikan fungsi navigasi berjalan lancar di seluruh siklus proses aplikasi, terapkan metode berikut di class
MainActivityAnda:
override fun onSaveInstanceState(savedInstanceState: Bundle) {
super.onSaveInstanceState(savedInstanceState)
navView.onSaveInstanceState(savedInstanceState)
}
override fun onTrimMemory(level: Int) {
super.onTrimMemory(level)
navView.onTrimMemory(level)
}
override fun onStart() {
super.onStart()
navView.onStart()
}
override fun onResume() {
super.onResume()
navView.onResume()
}
override fun onPause() {
navView.onPause()
super.onPause()
}
override fun onConfigurationChanged(configuration: Configuration) {
super.onConfigurationChanged(configuration)
navView.onConfigurationChanged(configuration)
}
override fun onStop() {
navView.onStop()
super.onStop()
}
override fun onDestroy() {
navView.onDestroy()
withNavigatorAsync {
// Unregister event listeners to avoid memory leaks.
if (arrivalListener != null) {
navigator.removeArrivalListener(arrivalListener)
}
if (routeChangedListener != null) {
navigator.removeRouteChangedListener(routeChangedListener)
}
navigator.simulator?.unsetUserLocation()
navigator.cleanup()
}
super.onDestroy()
}
9. Menetapkan tujuan
Sekarang Anda siap untuk menyetel tujuan dan memulai panduan navigasi. Di file MainActivity.kt, lakukan perubahan berikut:
- Tambahkan metode
navigateToPlace()baru yang menetapkan tujuan navigasi dan menerima parameterplaceId.
/**
* Requests directions from the user's current location to a specific place (provided by the
* Place ID).
*/
private fun navigateToPlace(placeId: String) {
}
- Dalam metode
navigateToPlace(), gunakan metodeWaypoint.builder()untuk membuatWaypointdari ID Tempat yang diteruskan ke metode. TanganiUnsupportedPlaceIdExceptionyang dapat muncul, untuk situasi saat ID Tempat tidak dapat diselesaikan ke alamat yang tepat:
val waypoint: Waypoint? =
// Set a destination by using a Place ID (the recommended method)
try {
Waypoint.builder().setPlaceIdString(placeId).build()
} catch (e: Waypoint.UnsupportedPlaceIdException) {
showToast("Place ID was unsupported.")
return
}
- Tambahkan kode berikut ke metode
navigateToPlace()untuk menetapkan tujuan menggunakan Titik Jalan:
val pendingRoute = mNavigator?.setDestination(waypoint)
// Set an action to perform when a route is determined to the destination
pendingRoute?.setOnResultListener { code ->
when (code) {
RouteStatus.OK -> {
// Code to start guidance will go here
}
RouteStatus.ROUTE_CANCELED -> showToast("Route guidance canceled.")
RouteStatus.NO_ROUTE_FOUND,
RouteStatus.NETWORK_ERROR ->
// TODO: Add logic to handle when a route could not be determined
showToast("Error starting guidance: $code")
else -> showToast("Error starting guidance: $code")
}
}
Objek Navigator memiliki metode setDestinations() yang dapat mengambil berbagai parameter. Opsi yang paling dasar adalah menyediakan Waypoint. Nilai defaultnya adalah mode perjalanan DRIVING, yang cocok untuk mobil roda 4. Metode setDestinations() menampilkan objek ListenableResultFuture yang berisi objek RouteStatus. RouteStatus akan menunjukkan apakah rute ke tujuan ditemukan atau tidak dan memungkinkan Anda menangani berbagai status error jika tidak.
- Lakukan perubahan konfigurasi tambahan untuk meningkatkan pengalaman pengguna navigasi:
// Hide the toolbar to maximize the navigation UI
supportActionBar?.hide()
// Enable voice audio guidance (through the device speaker)
mNavigator?.setAudioGuidance(Navigator.AudioGuidance.VOICE_ALERTS_AND_GUIDANCE)
// Simulate vehicle progress along the route (for demo/debug builds)
if (BuildConfig.DEBUG) {
mNavigator?.simulator?.simulateLocationsAlongExistingRoute(
SimulationOptions().speedMultiplier(5f)
)
}
Perubahan ini mencakup peningkatan berikut:
- Menyembunyikan Bilah Tindakan untuk memaksimalkan ruang bagi UI Navigasi.
- Mengaktifkan panduan audio untuk membacakan peringatan dan petunjuk navigasi.
- Menyiapkan Simulator untuk proses debug dengan menentukan pengganda kecepatan.
- Temukan ID Tempat yang akan bertindak sebagai tujuan Anda. Idealnya, lokasi ini tidak terlalu jauh dari lokasi pengguna. Gunakan utilitas Google Maps Platform Place ID Finder atau dapatkan ID Tempat dari panggilan Places API.
Jika Anda menyimulasikan navigasi, Anda dapat menyetel lokasi pengguna dalam kode atau mengambilnya dari perangkat yang terhubung. Codelab ini akan mengasumsikan Anda menyimulasikan lokasi di London, Inggris Raya.
- Tambahkan objek pendamping ke class
MainActivityuntuk menyimpan lokasi awal dan ID tempat. Codelab ini akan menggunakan lokasi awal di London dan ID Tempat Trafalgar Square:
companion object{
const val TRAFALGAR_SQUARE ="ChIJH-tBOc4EdkgRJ8aJ8P1CUxo" //London, UK
val startLocation = LatLng(51.345678, -0.1234456)
}
- Tambahkan panggilan ke metode
navigateToPlace()dari callbackonNavigatorReadydi dalam metodeinitializeNavigationApi, dan tambahkan cabang logika yang akan dieksekusi dalam mode Debug, yang menetapkan lokasi pengguna:
// Disables the guidance notifications and shuts down the app and background service
// when the user dismisses/swipes away the app from Android's recent tasks.
navigator.setTaskRemovedBehavior(Navigator.TaskRemovedBehavior.QUIT_SERVICE)
mNavigator = navigator
if (BuildConfig.DEBUG) {
mNavigator?.simulator?.setUserLocation(MainActivity.startLocation)
}
//listen for events en route
registerNavigationListeners()
navView.getMapAsync {
googleMap ->
googleMap.followMyLocation(GoogleMap.CameraPerspective.TILTED)
}
//navigate to a destination
navigateToPlace(MainActivity.TRAFALGAR_SQUARE)
10. Membangun dan menjalankan kode Anda
Saat pertama kali menjalankan aplikasi, Anda harus memberikan izin akses lokasi ke aplikasi, dan menyetujui persyaratan penggunaan Navigation SDK.
Catatan: menjalankan aplikasi akan memanggil metode setDestinations() yang dikenai biaya setelah 1.000 tujuan pertama digunakan. Lihat Penggunaan dan penagihan untuk mengetahui informasi selengkapnya.


Menetapkan lokasi
Secara default, perangkat yang diemulasi mungkin memiliki lokasi yang ditetapkan ke kampus Google di Mountain View, California, kecuali jika Anda telah menetapkan lokasi dalam kode, atau menggunakan dialog properti emulator.
Jika ya, Anda mungkin mendapati bahwa aplikasi tidak dapat menemukan rute ke ID Tempat yang Anda konfigurasi (secara default, Sydney Opera House, Sydney, Australia). Hal ini akan ditunjukkan oleh pesan yang menyatakan "No route found", yang ditampilkan oleh metode showToast() Anda.

Mengodekan lokasi awal secara permanen
Untuk menyetel lokasi yang berbeda dalam kode, tambahkan baris berikut dalam metode navigateToPlace() di MainActivity.kt, sebelum panggilan ke mNavigator.startGuidance():
mNavigator?.simulator?.setUserLocation(startLocation)
Memulai emulator di lokasi default pilihan Anda
Untuk menyetel lokasi yang berbeda di emulator perangkat, mulai emulator jika belum berjalan, lalu klik menu 3 titik dengan tooltip "Extended Controls". Dialog yang terbuka memiliki opsi menu untuk "Lokasi".
Misalnya, jika Anda menggunakan ID Tempat Sydney Opera House sebagai tujuan, pilih lokasi di Sydney, Australia. Misalnya, telusuri "Pantai Bondi", pilih saran, lalu klik "Simpan Lokasi" di kanan bawah dialog. Anda juga dapat mengklik "Simpan Titik" untuk menambahkan lokasi ke daftar tersimpan untuk digunakan pada lain waktu.

Jika Anda menetapkan ID Tempat yang berbeda sebagai tujuan, pilih lokasi di dekatnya agar rute simulasi menjadi rute yang realistis, dan tidak terlalu panjang agar mudah di-debug.
Mulai ulang aplikasi dan aplikasi akan membuka tujuan.

11. Selamat!
Anda telah menyelesaikan codelab ini. Bagus - Anda telah tiba di tujuan! Selamat melakukan coding :-)

12. Manfaatkan lebih jauh
Jika Anda ingin mengembangkan aplikasi lebih lanjut, lihat topik berikut untuk mendapatkan inspirasi.
- Memproses peristiwa navigasi lainnya. Tambahkan kode untuk menampilkan pesan jika pengemudi mengubah rute, atau saat mereka tiba.
- Menyesuaikan antarmuka navigasi.
- Jika Anda menginginkan tantangan yang lebih besar, lihat apakah Anda dapat menambahkan kontrol Pemilih Tempat Places API untuk memungkinkan pengguna menetapkan tujuan. Petunjuk: Aplikasi demo Navigation SDK di GitHub memiliki implementasi contoh.
- Cegah potensi masalah dalam memanggil objek Navigator dan GoogleMap secara asinkron dengan menerapkan pendekatan yang digunakan dalam aplikasi demo Navigation SDK di Github. Dalam skenario aplikasi yang lebih kompleks, objek ini mungkin belum selesai diinisialisasi saat kode Anda berjalan. Tips: Anda dapat menambahkan class InitializedNavScope di akhir file MainActivity.kt untuk penerapan yang sangat cepat.