Mendapatkan Lokasi Pengguna
Dasar-dasar penyedia lokasi terpadu.
Mendapatkan Lokasi Pengguna adalah pelajaran Android Academy gratis di CoddyKit. Ini adalah pelajaran 2 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Android Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Android Academy mencakup 4 pelajaran total.
Di Mana Pengguna Berada?
Sebagian besar aplikasi yang menggunakan lokasi dimulai dengan satu pertanyaan: di mana perangkat berada saat ini? Android menjawabnya melalui Fused Location Provider, yang merupakan bagian dari layanan Google Play.
Dalam pelajaran ini, Anda akan menambahkan dependensi, meminta satu lokasi, mendengarkan pembaruan berkelanjutan, dan menampilkan hasilnya di Compose.
Mengapa Menggunakan Fused Provider
Android memiliki beberapa sumber lokasi: GPS, Wi-Fi, dan menara seluler. Fused Location Provider memadukannya secara cerdas untuk memberikan lokasi terbaik dengan penggunaan baterai sesedikit mungkin.
Anda hampir tidak pernah lagi menggunakan LocationManager secara langsung — klien fused lebih sederhana dan cerdas.
// build.gradle.kts (module)
dependencies {
implementation("com.google.android.gms:play-services-location:21.3.0")
}Mendeklarasikan Izin
Lokasi adalah sumber daya sensitif. Deklarasikan izin tersebut dalam AndroidManifest.xml. Gunakan ACCESS_FINE_LOCATION untuk posisi yang presisi atau ACCESS_COARSE_LOCATION untuk posisi perkiraan.
Mendeklarasikannya hanyalah langkah pertama — Anda juga harus memintanya saat aplikasi berjalan (akan dibahas dalam pelajaran berikutnya).
<!-- AndroidManifest.xml -->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />Membuat Klien Fused
Dapatkan FusedLocationProviderClient dari LocationServices. Di Compose, ambil konteks dengan LocalContext.current dan ingat klien tersebut agar tidak dibuat ulang pada setiap komposisi ulang.
import com.google.android.gms.location.LocationServices
@Composable
fun rememberFusedClient() = run {
val context = LocalContext.current
remember {
LocationServices.getFusedLocationProviderClient(context)
}
}Mendapatkan Lokasi Terakhir yang Diketahui
Jawaban tercepat adalah lastLocation — perbaikan lokasi terbaru yang sudah disimpan dalam tembolok sistem. Hasilnya berupa Task, jadi pasang pendengar keberhasilan.
Nilainya dapat berupa null jika tidak ada aplikasi yang baru-baru ini meminta lokasi, jadi selalu lakukan pemeriksaan null.
@SuppressLint("MissingPermission")
fun fetchLastLocation(
client: FusedLocationProviderClient,
onResult: (Location?) -> Unit
) {
client.lastLocation
.addOnSuccessListener { location -> onResult(location) }
.addOnFailureListener { onResult(null) }
}Menunggu Task dengan Coroutine
Callback dapat segera bersarang. Pustaka kotlinx-coroutines-play-services menambahkan .await() agar Anda dapat membaca lokasi dengan kode penangguhan yang rapi.
import kotlinx.coroutines.tasks.await
@SuppressLint("MissingPermission")
suspend fun currentLastLocation(
client: FusedLocationProviderClient
): Location? {
return client.lastLocation.await()
}Meminta Lokasi Terbaru
lastLocation mungkin sudah kedaluwarsa. Untuk mendapatkan lokasi terbaru, panggil getCurrentLocation dengan tingkat prioritas. PRIORITY_HIGH_ACCURACY menggunakan GPS; PRIORITY_BALANCED_POWER_ACCURACY menghemat baterai.
import com.google.android.gms.location.Priority
import com.google.android.gms.location.CurrentLocationRequest
@SuppressLint("MissingPermission")
suspend fun freshLocation(
client: FusedLocationProviderClient
): Location? {
val request = CurrentLocationRequest.Builder()
.setPriority(Priority.PRIORITY_HIGH_ACCURACY)
.build()
return client.getCurrentLocation(request, null).await()
}Pembaruan Lokasi Berkelanjutan
Untuk navigasi atau pelacakan, Anda memerlukan aliran pembaruan. Buat LocationRequest dengan interval, lalu daftarkan LocationCallback melalui requestLocationUpdates.
Selalu hentikan pembaruan saat sudah selesai untuk menghemat baterai.
import com.google.android.gms.location.LocationRequest
import com.google.android.gms.location.LocationResult
import com.google.android.gms.location.LocationCallback
val request = LocationRequest.Builder(
Priority.PRIORITY_HIGH_ACCURACY,
5000L // 5 seconds
).build()
val callback = object : LocationCallback() {
override fun onLocationResult(result: LocationResult) {
result.lastLocation?.let { /* use it */ }
}
}Pembaruan sebagai Flow
Pola yang rapi membungkus pembaruan dalam callbackFlow, sehingga konsumen mengumpulkan lokasi dan pembaruan berhenti secara otomatis saat pengumpulan berakhir melalui awaitClose.
import kotlinx.coroutines.channels.awaitClose
import kotlinx.coroutines.flow.callbackFlow
@SuppressLint("MissingPermission")
fun FusedLocationProviderClient.locationFlow(request: LocationRequest) = callbackFlow {
val cb = object : LocationCallback() {
override fun onLocationResult(result: LocationResult) {
result.lastLocation?.let { trySend(it) }
}
}
requestLocationUpdates(request, cb, Looper.getMainLooper())
awaitClose { removeLocationUpdates(cb) }
}Menampilkan Lokasi di Compose
Kumpulkan hasilnya dalam komposabel menggunakan LaunchedEffect untuk pembacaan satu kali, atau collectAsStateWithLifecycle untuk aliran pembaruan. Kemudian tampilkan koordinatnya.
@Composable
fun LocationLabel(client: FusedLocationProviderClient) {
var location by remember { mutableStateOf<Location?>(null) }
LaunchedEffect(Unit) {
location = freshLocation(client)
}
Text(
location?.let { "Lat ${it.latitude}, Lng ${it.longitude}" }
?: "Locating..."
)
}Kompromi antara Baterai dan Akurasi
Lokasi adalah salah satu penggunaan baterai terbesar dalam aplikasi seluler. Pilih akurasi terendah yang masih memenuhi kebutuhan Anda, gunakan interval pembaruan terpanjang yang masih dapat diterima, dan selalu hentikan pembaruan saat layar tidak lagi ditampilkan.
Akurasi tinggi + pembaruan yang sering akan menguras baterai dengan cepat — gunakan hanya untuk navigasi aktif.
Pemeriksaan Singkat
Anda memerlukan posisi terkini yang paling akurat saat ini juga, dengan menggunakan fungsi penangguhan. Pendekatan mana yang paling sesuai?
Rangkuman
Sekarang Anda dapat membaca lokasi perangkat:
- Tambahkan
play-services-locationdan deklarasikanACCESS_FINE/COARSE_LOCATION. - Dapatkan
FusedLocationProviderClientdariLocationServices. - Gunakan
lastLocationuntuk lokasi tersimpan, dangetCurrentLocationuntuk lokasi terbaru. - Alirkan pembaruan melalui
requestLocationUpdates/callbackFlow, lalu hentikan untuk menghemat baterai.
Berikutnya: menggambar penanda dan memindahkan kamera ke koordinat tersebut.
Belajar Kotlin dengan tutor AI — gratis
Tulis dan jalankan kode asli di browser kamu, dapatkan bantuan instan dari tutor AI 24/7, dan lanjutkan di mana kamu tinggalkan di web atau aplikasi.
- Kursus
- 36
- Pelajaran
- 152
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Mendapatkan Lokasi Pengguna” gratis?
Ya — teks lengkap “Mendapatkan Lokasi Pengguna” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Android Academy, upgrade ke CoddyKit PRO. Kursus Android Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Mendapatkan Lokasi Pengguna”?
Dasar-dasar penyedia lokasi terpadu. Kamu berlatih Android Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai Android Academy?
Tidak diperlukan pengalaman sebelumnya. Android Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 2 dari 4.
Berapa lama pelajaran “Mendapatkan Lokasi Pengguna” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran Android Academy ini?
Ya. Setiap pelajaran Android Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Menampilkan Peta
- Mendapatkan Lokasi Pengguna
- Penanda dan Kamera
- Izin Lokasi dengan Cara yang Tepat