Google berkomitmen untuk mendorong terwujudnya keadilan rasial bagi komunitas Kulit Hitam. Lihat caranya.

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: Saat aplikasi berjalan di latar belakang, akses ke lokasi harus diwajibkan untuk fungsionalitas 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 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 memiliki fitur 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. Keakuratan lokasi yang ditampilkan oleh panggilan ini ditentukan oleh setelan izin yang Anda masukkan dalam manifes aplikasi Anda, seperti yang dijelaskan di 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 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.

Mempertahankan perkiraan terbaik saat ini

Anda mungkin mengharapkan objek Location yang ada di dalam panggilan terbaru ke getLastLocation() menjadi yang paling akurat. Namun, karena akurasi lokasi bervariasi, nilai terbaru belum tentu yang terbaik. Anda harus menyertakan logika saat memilih lokasi yang akan ditampilkan berdasarkan beberapa kriteria. Rangkaian kriteria juga bervariasi, bergantung pada kasus penggunaan aplikasi dan hasil dari pengujian lapangan.

Untuk memvalidasi akurasi lokasi yang ditampilkan dari getLastLocation(), selesaikan langkah-langkah yang mencakup hal berikut:

  • Periksa apakah lokasi yang diambil secara signifikan lebih baru daripada lokasi yang diambil sebelumnya.
  • Periksa apakah akurasi yang diklaim oleh lokasi lebih baik atau lebih buruk dibandingkan dengan perkiraan sebelumnya.
  • Periksa penyedia yang dikaitkan dengan lokasi baru. Tentukan apakah Anda lebih memercayai penyedia ini daripada penyedia yang digunakan di lokasi yang disimpan dalam cache aplikasi Anda.