Mendapatkan lokasi terakhir yang diketahui

Dengan menggunakan location API layanan Google Play, aplikasi Anda dapat meminta lokasi terakhir yang diketahui dari perangkat pengguna. Pada umumnya, Anda tertarik dengan lokasi pengguna saat ini, yang biasanya setara dengan lokasi terakhir perangkat yang diketahui.

Secara khusus, gunakan penyedia lokasi gabungan untuk mengambil lokasi terakhir perangkat yang diketahui. Penyedia lokasi gabungan adalah salah satu location API di layanan Google Play. API ini mengelola teknologi lokasi yang mendasarinya dan menyediakan API sehingga Anda dapat menentukan persyaratan pada tingkat tinggi, seperti akurasi tinggi atau daya rendah. API tersebut juga mengoptimalkan penggunaan daya baterai perangkat.

Tutorial ini menunjukkan cara membuat satu permintaan untuk lokasi perangkat menggunakan metode getLastLocation() di penyedia lokasi gabungan.

Menyiapkan layanan Google Play

Untuk mengakses penyedia lokasi gabungan, project pengembangan aplikasi Anda harus menyertakan layanan Google Play. Download dan instal komponen layanan Google Play melalui SDK Manager, lalu tambahkan library ke project Anda. Untuk mengetahui detailnya, lihat panduan Menyiapkan layanan Google Play.

Menentukan izin aplikasi

Aplikasi yang fiturnya menggunakan layanan lokasi harus meminta izin akses lokasi, bergantung pada kasus penggunaan fitur tersebut.

Membuat klien layanan lokasi

Dalam metode onCreate() aktivitas Anda, buat instance Klien Penyedia Lokasi Gabungan seperti yang ditunjukkan cuplikan kode berikut.

private lateinit var fusedLocationClient: FusedLocationProviderClient

override fun onCreate(savedInstanceState: Bundle?) {
    // ...

    fusedLocationClient = LocationServices.getFusedLocationProviderClient(this)
}

Mendapatkan lokasi terakhir yang diketahui

Setelah membuat klien Layanan Lokasi, Anda bisa mendapatkan lokasi terakhir yang diketahui dari perangkat pengguna. Gunakan metode getLastLocation() penyedia lokasi gabungan untuk mengambil lokasi perangkat. Presisi lokasi yang ditampilkan oleh panggilan ini ditentukan oleh setelan izin yang Anda masukkan dalam manifes aplikasi, seperti yang dijelaskan dalam panduan tentang cara meminta izin akses lokasi.

Untuk meminta lokasi terakhir yang diketahui, panggil metode getLastLocation(). Cuplikan kode berikut mengilustrasikan permintaan dan penanganan dasar respons:

fusedLocationClient.lastLocation
    .addOnSuccessListener { location: Location? ->
        // Got last known location. In some rare situations this can be null.
    }

Metode getLastLocation() menampilkan Task yang dapat Anda gunakan untuk mendapatkan objek Location dengan koordinat lintang dan bujur lokasi geografis. Objek lokasi mungkin berupa null dalam situasi berikut:

  • Lokasi dimatikan dalam setelan perangkat. Hasilnya bisa berupa null meskipun lokasi terakhir sebelumnya diambil karena menonaktifkan lokasi juga akan menghapus cache.
  • Perangkat tidak pernah mencatat lokasinya, yang mungkin terjadi pada perangkat baru atau perangkat yang telah dipulihkan ke setelan pabrik.
  • Layanan Google Play di perangkat telah dimulai ulang, dan tidak ada klien Penyedia Lokasi Gabungan aktif yang meminta lokasi setelah layanan dimulai ulang. Untuk menghindari situasi ini, Anda dapat membuat klien baru dan meminta pembaruan lokasi sendiri. Untuk informasi selengkapnya, lihat Meminta pembaruan lokasi.

Memilih perkiraan lokasi terbaik

FusedLocationProviderClient menyediakan beberapa metode untuk mengambil informasi lokasi perangkat. Pilih salah satu dari metode berikut, bergantung pada kasus penggunaan aplikasi Anda:

  • getLastLocation() mendapatkan perkiraan lokasi lebih cepat dan meminimalkan penggunaan baterai yang dapat dikaitkan dengan aplikasi Anda. Namun, informasi lokasi mungkin sudah tidak berlaku, jika tidak ada klien lain yang aktif menggunakan lokasi baru-baru ini.
  • getCurrentLocation() mendapatkan lokasi yang lebih baru dan lebih akurat secara lebih konsisten. Namun, metode ini dapat menyebabkan komputasi lokasi aktif terjadi di perangkat.

    Ini adalah cara yang direkomendasikan untuk mendapatkan lokasi baru, jika memungkinkan, dan lebih aman daripada alternatif seperti memulai dan mengelola sendiri pembaruan lokasi menggunakan requestLocationUpdates(). Saat aplikasi Anda memanggil requestLocationUpdates(), aplikasi terkadang dapat menghabiskan sejumlah besar daya jika lokasi tidak tersedia, atau jika permintaan tidak dihentikan dengan benar setelah mendapatkan lokasi baru.

Referensi lainnya

Untuk informasi selengkapnya tentang mengambil lokasi saat ini di Android, lihat materi berikut:

Contoh

  • Aplikasi contoh untuk mendemonstrasikan praktik terbaik saat mengambil lokasi saat ini.