Dengan Places SDK for Android, Anda dapat menemukan tempat di lokasi yang dilaporkan saat ini di perangkat. Contoh tempat mencakup bisnis lokal, lokasi menarik, dan lokasi geografis.
Izin
Untuk menggunakan library, Anda tidak perlu mendeklarasikan izin tambahan apa pun dalam manifes aplikasi,
karena library mendeklarasikan semua izin yang digunakannya dalam manifesnya. Namun, jika aplikasi Anda menggunakan
PlacesClient.findCurrentPlace(),
Anda harus meminta izin akses lokasi
saat runtime.
Jika aplikasi Anda tidak menggunakan PlacesClient.findCurrentPlace(), hapus secara eksplisit
izin ACCESS_FINE_LOCATION dan ACCESS_COARSE_LOCATION yang diperkenalkan
oleh library dengan menambahkan kode berikut ke manifes Anda:
<manifest ... xmlns:tools="http://schemas.android.com/tools"> ... <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" tools:node="remove"/> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" tools:node="remove"/> ... </manifest>
Baca selengkapnya tentang izin dan pertimbangkan untuk menggunakan EasyPermissions untuk memulai.
Mendapatkan lokasi saat ini
Untuk menemukan bisnis lokal atau tempat lain tempat perangkat saat ini berada, ikuti langkah-langkah berikut:
- Panggil
ContextCompat.checkSelfPermissionuntuk memeriksa apakah pengguna telah memberikan izin untuk mengakses lokasi perangkatnya. Aplikasi Anda juga harus menyertakan kode untuk meminta izin kepada pengguna, dan untuk menangani hasilnya. Lihat Meminta Izin Aplikasi untuk mengetahui detailnya. - Buat
FindCurrentPlaceRequest, dengan meneruskanListdariPlace.Field, yang menentukan jenis data tempat yang harus diminta aplikasi Anda. - Panggil
PlacesClient.findCurrentPlace(), dengan meneruskanFindCurrentPlaceRequestyang Anda buat di langkah sebelumnya. - Dapatkan daftar
PlaceLikelihooddariFindCurrentPlaceResponse.
Kolom sesuai dengan hasil penelusuran Place Search, dan dibagi menjadi tiga kategori penagihan: Basic, Contact, dan Atmosphere. Kolom Basic ditagih dengan tarif dasar dan tidak dikenai biaya tambahan. Kolom Contact dan Atmosphere ditagih dengan tarif lebih tinggi. Untuk informasi selengkapnya tentang cara penagihan permintaan data Tempat, lihat Penggunaan dan Penagihan.
API menampilkan
FindCurrentPlaceResponse
dalam
Task.
FindCurrentPlaceResponse berisi daftar objek
PlaceLikelihood
yang mewakili tempat yang kemungkinan menjadi lokasi perangkat. Untuk
setiap tempat, hasilnya mencakup indikasi kemungkinan bahwa
tempat tersebut adalah tempat yang tepat. Daftar mungkin kosong, jika tidak ada tempat yang diketahui
sesuai dengan lokasi perangkat yang diberikan.
Anda dapat memanggil
PlaceLikelihood.getPlace()
untuk mengambil objek
Place,
dan
PlaceLikelihood.getLikelihood()
untuk mendapatkan rating kemungkinan tempat. Nilai yang lebih tinggi berarti probabilitas yang lebih besar bahwa tempat tersebut adalah kecocokan terbaik.
Contoh kode berikut mengambil daftar tempat yang paling mungkin menjadi lokasi perangkat, dan mencatat nama serta kemungkinan untuk setiap tempat.
Kotlin
// Use fields to define the data types to return. val placeFields = listOf(Place.Field.DISPLAY_NAME, Place.Field.FORMATTED_ADDRESS, Place.Field.LOCATION) // Define the search area around the current location (500m radius). val currentLocation = LatLng(37.4220, -122.0841) val circle = CircularBounds.newInstance(currentLocation, 500.0) val request = SearchNearbyRequest.builder(circle, placeFields) .setMaxResultCount(20) .build() // Call searchNearby and handle the response (first check that the user has granted permission). if (ContextCompat.checkSelfPermission(this, permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED ) { placesClient.searchNearby(request).addOnSuccessListener { response -> binding.progressBar.visibility = View.GONE adapter.setPlaces(response.places) }.addOnFailureListener { exception -> binding.progressBar.visibility = View.GONE if (exception is ApiException) { Log.e(TAG, "Place not found: ${exception.statusCode}") } } } else { // A local method to request required permissions; // See https://developer.android.com/training/permissions/requesting getLocationPermission() }
Java
// Use fields to define the data types to return. List<Place.Field> placeFields = Arrays.asList( Place.Field.DISPLAY_NAME, Place.Field.FORMATTED_ADDRESS, Place.Field.LOCATION); // Define the search area around the current location. LatLng currentLocation = new LatLng(37.4220, -122.0841); LocationRestriction circle = CircularBounds.newInstance(currentLocation, /* radius= */ 500.0); // Use the builder to create a SearchNearbyRequest. SearchNearbyRequest request = SearchNearbyRequest.builder(circle, placeFields).setMaxResultCount(20).build(); // Call searchNearby and handle the response (first check that the user has granted // permission). if (ContextCompat.checkSelfPermission(this, ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) { Task<SearchNearbyResponse> placeResponse = placesClient.searchNearby(request); placeResponse.addOnCompleteListener( task -> { binding.progressBar.setVisibility(View.GONE); if (task.isSuccessful()) { SearchNearbyResponse response = task.getResult(); adapter.setPlaces(response.getPlaces()); } else { Exception exception = task.getException(); if (exception instanceof ApiException apiException) { Log.e( "CurrentPlace", "Place not found: " + apiException.getStatusCode()); } } }); } else { // A local method to request required permissions; // See https://developer.android.com/training/permissions/requesting getLocationPermission(); }
Catatan tentang nilai kemungkinan:
- Kemungkinan memberikan probabilitas relatif bahwa tempat tersebut adalah kecocokan terbaik dalam daftar tempat yang ditampilkan untuk satu permintaan. Anda tidak dapat membandingkan kemungkinan di berbagai permintaan.
- Nilai kemungkinan akan berada di antara 0,0 dan 1,0.
Misalnya, untuk menunjukkan kemungkinan 55% bahwa tempat yang benar adalah Tempat A, dan kemungkinan 35% bahwa tempat yang benar adalah Tempat B, respons memiliki dua anggota, Tempat A dengan kemungkinan 0,55 dan Tempat B dengan kemungkinan 0,35.
Menampilkan atribusi dalam aplikasi Anda
Saat aplikasi Anda menampilkan informasi yang diperoleh dari
PlacesClient.findCurrentPlace(),
aplikasi juga harus menampilkan atribusi. Lihat dokumentasi tentang
atribusi.