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 fusi 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: Pada Android 8.0 (API level 26) dan yang lebih tinggi, jika aplikasi berjalan di latar belakang saat meminta lokasi saat ini, maka perangkat akan menghitung lokasi hanya beberapa kali setiap jam. Untuk mempelajari cara menyesuaikan aplikasi Anda dengan batas perhitungan ini, lihat Batas Lokasi Latar Belakang.

Pelajaran ini menunjukkan kepada Anda cara membuat permintaan tunggal untuk lokasi perangkat menggunakan metode getLastLocation() di penyedia lokasi fusi.

Menyiapkan Layanan Google Play

Untuk mengakses penyedia lokasi fusi, 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 menggunakan layanan lokasi harus meminta izin akses lokasi. Android menawarkan izin akses lokasi berikut:

Untuk mengakses lokasi perangkat, minta ACCESS_COARSE_LOCATION atau ACCESS_FINE_LOCATION. Izin yang Anda pilih menentukan keakuratan lokasi yang ditampilkan oleh API. Jika Anda menentukan ACCESS_COARSE_LOCATION, API akan menampilkan lokasi dengan akurasi yang kira-kira setara dengan satu blok kota.

Jika menargetkan Android 10 (API level 29) atau yang lebih tinggi dan perlu mengakses lokasi perangkat saat aplikasi Anda di latar belakang, Anda juga harus mendeklarasikan izin ACCESS_BACKGROUND_LOCATION. Untuk mempelajari lebih lanjut, lihat panduan cara menerima pembaruan lokasi berkala.

Pelajaran ini hanya membutuhkan lokasi sementara. Minta izin ini dengan elemen uses-permission di manifes aplikasi Anda, seperti yang diperlihatkan cuplikan kode berikut:

    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.google.android.gms.location.sample.basiclocationsample" >

      <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
    </manifest>
    

Membuat klien layanan lokasi

Dalam metode onCreate() aktivitas Anda, buat sebuah instance dari Klien Penyedia Lokasi Fusi seperti yang diperlihatkan 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. Ketika aplikasi Anda terhubung dengannya, Anda dapat menggunakan metode getLastLocation() penyedia lokasi fusi untuk mengambil lokasi perangkat. Keakuratan lokasi yang dikembalikan oleh panggilan ini ditentukan oleh setelan izin yang Anda masukkan dalam manifes aplikasi Anda, seperti yang dijelaskan di bagian Menentukan Izin Aplikasi pada dokumen ini.

Untuk meminta lokasi yang terakhir 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() mengembalikan Task yang dapat Anda gunakan untuk mendapatkan objek Location dengan koordinat lintang dan bujur dari lokasi geografis. Objek lokasi mungkin menjadi null dalam situasi berikut:

  • Lokasi dimatikan dalam 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 dikembalikan ke setelan pabrik.
  • Layanan Google Play pada perangkat telah dimulai ulang, dan tidak ada klien Penyedia Lokasi Fusi 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.