Izin Lokasi dengan Cara yang Tepat
Lokasi latar depan dan lokasi presisi.
Izin Lokasi dengan Cara yang Tepat adalah pelajaran Android Academy gratis di CoddyKit. Ini adalah pelajaran 4 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.
Izin Itu Wajib
Lokasi adalah salah satu izin Android yang paling sensitif. Mendeklarasikannya dalam manifes saja tidak cukup — pada Android modern, Anda harus memintanya saat aplikasi berjalan dan menangani setiap jawaban dengan baik.
Pelajaran ini membahas tingkatan izin, cara memintanya di Compose, cara menangani penolakan, serta aturan baru tentang presisi vs perkiraan dan akses latar belakang.
Tiga Izin Lokasi
Android membagi akses lokasi menjadi beberapa tingkatan:
ACCESS_COARSE_LOCATION— perkiraan (sekitar satu blok kota).ACCESS_FINE_LOCATION— presisi (tingkat GPS).ACCESS_BACKGROUND_LOCATION— akses saat aplikasi Anda tidak berada di latar depan.
Mintalah hanya izin yang benar-benar Anda perlukan. Akses latar belakang memicu pemeriksaan tambahan di Play Store.
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<!-- only if truly needed: -->
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />Meminta Izin di Compose
API Hasil Aktivitas memberi Anda peluncur untuk dialog izin. Di Compose, gunakan rememberLauncherForActivityResult dengan kontrak RequestMultiplePermissions.
import androidx.activity.compose.rememberLauncherForActivityResult
import androidx.activity.result.contract.ActivityResultContracts
val launcher = rememberLauncherForActivityResult(
ActivityResultContracts.RequestMultiplePermissions()
) { result ->
val fine = result[Manifest.permission.ACCESS_FINE_LOCATION] == true
val coarse = result[Manifest.permission.ACCESS_COARSE_LOCATION] == true
// react to the user's choice
}Meluncurkan Permintaan
Picu dialog dengan memanggil launch() menggunakan array izin — biasanya sebagai respons terhadap ketukan tombol, bukan secara otomatis saat layar dimuat.
Button(onClick = {
launcher.launch(
arrayOf(
Manifest.permission.ACCESS_FINE_LOCATION,
Manifest.permission.ACCESS_COARSE_LOCATION
)
)
}) {
Text("Enable location")
}Memeriksa Apakah Izin Sudah Diberikan
Jangan meminta ulang jika izin sudah diberikan. Periksa dengan ContextCompat.checkSelfPermission sebelum meluncurkan permintaan.
import androidx.core.content.ContextCompat
import android.content.pm.PackageManager
fun hasFineLocation(context: Context): Boolean {
return ContextCompat.checkSelfPermission(
context,
Manifest.permission.ACCESS_FINE_LOCATION
) == PackageManager.PERMISSION_GRANTED
}Presisi vs Perkiraan
Sejak Android 12 (API 31), pengguna dapat memberikan lokasi perkiraan meskipun Anda meminta lokasi presisi. Jadi, Anda harus meminta keduanya, presisi dan perkiraan, secara bersamaan, serta menerima bahwa pengguna mungkin menurunkan akses Anda menjadi perkiraan.
Rancang fitur Anda agar tetap berfungsi dengan baik menggunakan lokasi perkiraan jika memungkinkan.
// Request both — the system shows a Precise/Approximate toggle
launcher.launch(
arrayOf(
Manifest.permission.ACCESS_FINE_LOCATION,
Manifest.permission.ACCESS_COARSE_LOCATION
)
)
// If only COARSE comes back granted, you got approximate location.Menampilkan Penjelasan
Jika pengguna menolak sekali, Android memungkinkan Anda memeriksa shouldShowRequestPermissionRationale. Jika nilainya true, tampilkan penjelasan yang mudah dipahami tentang alasan Anda memerlukan lokasi sebelum memintanya lagi.
import androidx.core.app.ActivityCompat
val shouldExplain = ActivityCompat.shouldShowRequestPermissionRationale(
activity,
Manifest.permission.ACCESS_FINE_LOCATION
)
if (shouldExplain) {
// show a dialog: "We use your location to find nearby stores"
}Menangani Penolakan Permanen
Jika pengguna memilih Jangan tanya lagi (atau menolak dua kali), sistem tidak lagi menampilkan dialog. Satu-satunya cara adalah mengarahkan mereka ke pengaturan aplikasi agar dapat mengaktifkannya secara manual.
import android.content.Intent
import android.provider.Settings
import android.net.Uri
fun openAppSettings(context: Context) {
val intent = Intent(
Settings.ACTION_APPLICATION_DETAILS_SETTINGS,
Uri.fromParts("package", context.packageName, null)
)
context.startActivity(intent)
}Menggunakan Accompanist Permissions
Pustaka accompanist-permissions membungkus semua proses ini dalam status yang sesuai untuk Compose. rememberMultiplePermissionsState melacak status pemberian izin dan menyediakan pemanggilan launchMultiplePermissionRequest().
import com.google.accompanist.permissions.rememberMultiplePermissionsState
val permissions = rememberMultiplePermissionsState(
listOf(
Manifest.permission.ACCESS_FINE_LOCATION,
Manifest.permission.ACCESS_COARSE_LOCATION
)
)
if (permissions.allPermissionsGranted) {
// show the map / read location
} else {
Button(onClick = { permissions.launchMultiplePermissionRequest() }) {
Text("Grant location")
}
}Aturan Lokasi di Latar Belakang
Lokasi di latar belakang memerlukan alur dua langkah: pertama berikan izin lokasi saat aplikasi digunakan (akurat/perkiraan), lalu minta ACCESS_BACKGROUND_LOCATION secara terpisah, yang akan membuka setelan sistem di Android 11+. Play Store mengharuskan alasan yang jelas dan kebijakan privasi.
Mintalah izin ini hanya jika aplikasi Anda benar-benar memerlukan lokasi saat ditutup—misalnya untuk geofencing atau pelacakan kebugaran.
// Step 1: request foreground first and confirm it's granted.
// Step 2: only then request background:
launcher.launch(
arrayOf(Manifest.permission.ACCESS_BACKGROUND_LOCATION)
)
// On Android 11+ this sends the user to settings to pick "Allow all the time".Peta yang Dilindungi Izin
Satukan semuanya: batasi akses ke peta berdasarkan status izin. Tampilkan peta hanya setelah izin diberikan; jika belum, tampilkan permintaan izin. Inilah pola standar yang menghormati pengguna.
@Composable
fun LocationGate(permissions: MultiplePermissionsState) {
when {
permissions.allPermissionsGranted -> MapScreen()
else -> Column {
Text("We need location to show nearby places.")
Button(onClick = { permissions.launchMultiplePermissionRequest() }) {
Text("Allow location")
}
}
}
}Pemeriksaan Singkat
Sejak Android 12, pengguna dapat memilih lokasi Perkiraan alih-alih lokasi Akurat. Apa artinya ini bagi permintaan izin Anda?
Ringkasan
Sekarang Anda sudah mengetahui cara meminta izin lokasi secara bertanggung jawab:
- Deklarasikan lokasi perkiraan/akurat (dan lokasi latar belakang hanya jika penting) di manifes.
- Minta izin saat runtime menggunakan API Activity Result atau
accompanist-permissions. - Minta izin akurat + perkiraan secara bersamaan untuk mendukung pilihan lokasi akurat/perkiraan.
- Tampilkan alasan, lalu arahkan pengguna yang menolak secara permanen ke setelan aplikasi.
- Tangani lokasi latar belakang sebagai alur dua langkah yang terpisah dan memiliki alasan yang jelas.
Dengan demikian, bagian Maps & Location Services selesai—Anda dapat menampilkan peta, menemukan pengguna, menempatkan penanda, dan meminta izin dengan cara yang tepat.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Izin Lokasi dengan Cara yang Tepat” gratis?
Ya — teks lengkap “Izin Lokasi dengan Cara yang Tepat” 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 “Izin Lokasi dengan Cara yang Tepat”?
Lokasi latar depan dan lokasi presisi. 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 4 dari 4.
Berapa lama pelajaran “Izin Lokasi dengan Cara yang Tepat” 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