Dengan Places SDK for Android, Anda dapat menemukan tempat di lokasi yang saat ini dilaporkan pada perangkat. Contoh tempat meliputi bisnis lokal, lokasi menarik, dan lokasi geografis.
Izin
Untuk menggunakan library ini, Anda tidak perlu mendeklarasikan izin tambahan apa pun dalam manifes aplikasi,
karena library mendeklarasikan semua izin yang digunakan dalam manifesnya. Namun, jika aplikasi 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:
<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 lokasi lain tempat perangkat berada saat ini, ikuti langkah-langkah berikut:
- Panggil
ContextCompat.checkSelfPermission
untuk memeriksa apakah pengguna telah memberikan izin untuk mengakses lokasi perangkatnya. Aplikasi Anda juga harus menyertakan kode untuk meminta izin pengguna, dan menangani hasilnya. Lihat Meminta Izin Aplikasi untuk mengetahui detailnya. - Buat
FindCurrentPlaceRequest
, dengan meneruskanList
dariPlace.Field
, yang menentukan jenis data tempat yang harus diminta aplikasi Anda. - Panggil
PlacesClient.findCurrentPlace()
, dengan meneruskanFindCurrentPlaceRequest
yang Anda buat di langkah sebelumnya. - Dapatkan daftar
PlaceLikelihood
dariFindCurrentPlaceResponse
.
Kolom akan sesuai dengan hasil 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 kemungkinan perangkat berada. Untuk setiap tempat, hasilnya mencakup indikasi kemungkinan bahwa tempat tersebut adalah tempat yang tepat. Daftar ini 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 semakin besar
probabilitas tempat tersebut adalah yang paling cocok.
Contoh kode berikut mengambil daftar tempat kemungkinan lokasi perangkat, dan mencatat nama serta kemungkinan untuk setiap tempat.
Kotlin
// Use fields to define the data types to return. val placeFields: List<Place.Field> = listOf(Place.Field.NAME) // Use the builder to create a FindCurrentPlaceRequest. val request: FindCurrentPlaceRequest = FindCurrentPlaceRequest.newInstance(placeFields) // Call findCurrentPlace and handle the response (first check that the user has granted permission). if (ContextCompat.checkSelfPermission(this, permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) { val placeResponse = placesClient.findCurrentPlace(request) placeResponse.addOnCompleteListener { task -> if (task.isSuccessful) { val response = task.result for (placeLikelihood: PlaceLikelihood in response?.placeLikelihoods ?: emptyList()) { Log.i( TAG, "Place '${placeLikelihood.place.name}' has likelihood: ${placeLikelihood.likelihood}" ) } } else { val exception = task.exception 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 = Collections.singletonList(Place.Field.NAME); // Use the builder to create a FindCurrentPlaceRequest. FindCurrentPlaceRequest request = FindCurrentPlaceRequest.newInstance(placeFields); // Call findCurrentPlace and handle the response (first check that the user has granted permission). if (ContextCompat.checkSelfPermission(this, ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) { Task<FindCurrentPlaceResponse> placeResponse = placesClient.findCurrentPlace(request); placeResponse.addOnCompleteListener(task -> { if (task.isSuccessful()){ FindCurrentPlaceResponse response = task.getResult(); for (PlaceLikelihood placeLikelihood : response.getPlaceLikelihoods()) { Log.i(TAG, String.format("Place '%s' has likelihood: %f", placeLikelihood.getPlace().getName(), placeLikelihood.getLikelihood())); } } else { Exception exception = task.getException(); if (exception instanceof ApiException) { ApiException apiException = (ApiException) exception; Log.e(TAG, "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 ini memberikan probabilitas relatif untuk tempat yang paling cocok 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 merepresentasikan kemungkinan 55% bahwa tempat yang benar adalah Tempat A, dan kemungkinan 35% 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.