Mendapatkan data lokasi pengguna di Android

Salah satu fitur aplikasi jaman now adalah mampu mengenali lokasi si pengguna. Dengan mengetahui lokasi pengguna, aplikasi yang kita jalankan bisa memberikan informasi yang lebih mengena, menyesuaikan konteks. Begitulah kira-kira. Untuk di Android, bagaimana cara si aplikasi mengetahui lokasi seseorang?

Di Android, salah satu cara mengetahui lokasi pengguna adalah dengan mendapatkan data Last Known Location. Dengan data ini, si aplikasi bisa mendapatkan koordinat lokasi pengguna. Untuk memanfaatkan fitur ini, kita harus memasang Google Play Services. Karena itu, dalam berkas build.gradle, sertakan librari Google Play Services location. Saya pakai yang versi 11.0.4.

Sebenarnya di dokumentasinya sudah ada versi terbaru, tapi entah kenapa selalu gagal ketika sinkronisasi gradle.

Setelah itu, di bagian AndroidManifest.xml, tambahkan permission yang berhubungan dengan lokasi. Ada dua izin yang bisa digunakan, yaitu ACCESS_COARSE_LOCATION dan ACCESS_FINE_LOCATION. Perbedaannya terletak pada tingkat akurasi. Untuk yang COARSE, tingkat akurasinya tidak terlalu tinggi dibanding yang FINE. Untuk percobaan sekarang, saya pakai yang pertama.

Sekarang mari kita mulai menuliskan kodenya. Tapi sebelumnya kita buat dulu layoutnya. Untuk layout, sederhana saja, kita siapkan satu buah button dan textview. Setiap button diklik, textview diisi dengan data koordinat lokasi pengguna.

Oh iya, di sini saya pakai Kotlin, bukan Java. Ya hitung-hitung belajar Kotlin :D. Untuk dapat mengakses lokasi, pada bagian OnCreate() di activity yang dipilih, buat objek instan FusedLocationProviderClient. Si objek inilah yang nantinya akan mendapatkan koordinat pengguna.

Ngomong-ngomong soal Kotlin, salah satu fitur menarik untuk Android dari bahasa asal Rusia itu adalah plugin Kotlin-android-extensions. Dengan plugin ini, kita tidak perlu lagi menuliskan findViewById(R.id.namawidgetnya), tapi cukup langsung akses nama id-nya. Seperti untuk button di atas, jadinya seperti ini:

Untuk mencapatkan response perizinan dari pengguna, timpa fungsi onRequestPermissionsResult:

Sementara fungsi untuk mendapatkan koordinatnya seperti ini:

Kalau sudah, mari kita coba di emulator.

minta izin dulu

null

Loh kok null? Ada apa ini? Dari hasil baca-baca di SO, katanya koordinatnya harus diedit manual. Mari kita coba perbaiki dulu koordinat bohongannya. Kita akses emulator lewat telnet:

Untuk membetulkan koordinat emulator, lakukan perintah geo fix , misalnya seperti ini:

Kembali ke emulator, mari kita coba lagi.

masih ngaco

Lumayan lah, sekarang sudah dapat membaca koordinat, tidak null lagi. Tapi kenapa tidak sesuai dengan data yang kita masukkan ya? Padahal saat coba di ponsel betulan, datanya sesuai. Apa karena kita tidak benar-benar meminta data koordinat sebenarnya? Dari dokumentasinya, akses COARSE -sesuai artinya, kasar- ya tidak akurat-akurat amat. Masih kasar.

Mari kita coba ganti COARSE dengan FINE. Ubah use-permission di AndroidManifest.xml dan di bagian pengecekan perizinan:

Di bagian setOnClikListener:

Mari kita coba lagi.

Datanya sesuai

Alhamdulillah, kali ini ternyata berhasil. Selamat!
Untuk kode lengkapnya bisa dilihat di sini :D.

Ada komentar?

%d bloggers like this: