Mendapatkan lokasi terakhir yang diketahui

Dengan location API layanan Google Play, aplikasi Anda dapat meminta lokasi terakhir yang diketahui dari perangkat pengguna. Dalam sebagian besar kasus, Anda ingin mengetahui lokasi pengguna saat ini, yang biasanya setara dengan lokasi perangkat yang terakhir diketahui.

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

Catatan: Saat aplikasi berjalan di latar belakang, akses ke lokasi harus diwajibkan untuk fungsi inti aplikasi dan disertai pengungkapan yang tepat kepada pengguna.

Tutorial ini menunjukkan kepada Anda cara membuat permintaan tunggal 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 dan tambahkan library ke project Anda. Untuk detailnya, lihat panduan dalam 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 sebuah instance dari Klien Penyedia Lokasi Fusi seperti yang ditampilkan dalam cuplikan kode berikut.

Kotlin

private lateinit var fusedLocationClient: FusedLocationProviderClient

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

    fusedLocationClient = LocationServices.getFusedLocationProviderClient(this)
}

Java

private FusedLocationProviderClient fusedLocationClient;

// ..

@Override
protected void onCreate(Bundle savedInstanceState) {
    // ...

    fusedLocationClient = LocationServices.getFusedLocationProviderClient(this);
}

Mendapatkan lokasi terakhir yang diketahui

Setelah Anda membuat klien Layanan Lokasi, Anda bisa mendapatkan lokasi terakhir yang diketahui dari perangkat pengguna. Saat aplikasi Anda terhubung dengannya, Anda dapat menggunakan metode getLastLocation() penyedia lokasi fusi untuk mengambil lokasi perangkat. Akurasi lokasi yang ditampilkan oleh panggilan ini ditentukan berdasarkan setelan izin yang Anda masukkan dalam manifes aplikasi Anda, seperti 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 respons yang sederhana:

Kotlin

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

Java

fusedLocationClient.getLastLocation()
        .addOnSuccessListener(this, new OnSuccessListener<Location>() {
            @Override
            public void onSuccess(Location location) {
                // Got last known location. In some rare situations this can be null.
                if (location != null) {
                    // Logic to handle location object
                }
            }
        });

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

  • Lokasi dinonaktifkan pada setelan perangkat. Hasilnya dapat menjadi null bahkan jika lokasi terakhir sebelumnya sudah diambil karena menonaktifkan lokasi juga akan membersihkan cache.
  • Perangkat tidak pernah mencatat lokasinya, yang mungkin merupakan kasus perangkat baru atau perangkat yang telah dipulihkan ke setelan pabrik.
  • Layanan Google Play pada perangkat telah dimulai ulang, dan tidak ada klien Penyedia Lokasi Gabungan aktif yang meminta lokasi setelah layanan dimulai ulang. Untuk menghindari situasi tersebut, Anda dapat membuat klien baru dan meminta pembaruan lokasi sendiri. Untuk informasi selengkapnya, lihat Menerima 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 secara aktif menggunakan lokasi baru-baru ini.
  • getCurrentLocation() mendapatkan lokasi yang lebih baru dan lebih akurat dengan cara yang 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.