Tempat Saat Ini

Pilih platform: Android iOS

Dengan menggunakan Places SDK for Android, Anda dapat menemukan tempat di lokasi perangkat yang dilaporkan saat ini. Contoh tempat mencakup lokasi lokal bisnis, 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 Anda menggunakan PlacesClient.findCurrentPlace(), Anda harus meminta izin akses lokasi pada runtime.

Jika aplikasi Anda tidak menggunakan PlacesClient.findCurrentPlace(), hapus secara eksplisit Izin ACCESS_FINE_LOCATION dan ACCESS_COARSE_LOCATION diperkenalkan di 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 akses dan pertimbangkan untuk menggunakan EasyPermissions untuk memulai.

Mendapatkan lokasi saat ini

Untuk menemukan bisnis lokal atau tempat lain tempat perangkat saat ini berada berada, ikuti langkah-langkah berikut:

  1. Panggil ContextCompat.checkSelfPermission untuk memeriksa apakah pengguna telah memberikan izin untuk mengakses perangkatnya lokasi HTTP/HTTPS. Aplikasi Anda juga harus menyertakan kode yang meminta izin kepada pengguna, dan untuk menangani hasilnya. Lihat Meminta Izin Aplikasi untuk mengetahui detailnya.
  2. Buat FindCurrentPlaceRequest, meneruskan List dari Place.Field, yang menentukan jenis data tempat yang harus diminta aplikasi Anda.
  3. Panggil PlacesClient.findCurrentPlace(), meneruskan FindCurrentPlaceRequest yang Anda buat di langkah waktu ini.
  4. Dapatkan daftar PlaceLikelihood dari FindCurrentPlaceResponse.

Kolom sesuai dengan hasil Place Search, dan dibagi menjadi tiga kategori penagihan: Dasar, Kontak, dan Atmosfer. Kolom Basic ditagih dengan tarif dasar dan tidak dikenai biaya tambahan tambahan. Kolom Contact dan Atmosphere ditagih dengan tarif lebih tinggi. Untuk informasi selengkapnya cara penagihan permintaan data Tempat, lihat Penggunaan dan Penagihan.

API menampilkan FindCurrentPlaceResponse di Task. FindCurrentPlaceResponse berisi daftar PlaceLikelihood objek yang mewakili tempat-tempat di mana perangkat mungkin berada. Sebagai setiap tempat, hasilnya mencakup indikasi kemungkinan bahwa itu 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 Place , dan PlaceLikelihood.getLikelihood() untuk mendapatkan peringkat kemungkinan suatu tempat. Nilai yang lebih tinggi berarti semakin besar probabilitas bahwa tempat tersebut adalah yang paling sesuai.

Contoh kode berikut mengambil daftar tempat perangkat berada kemungkinan besar berada, dan mencatat nama dan 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 memberikan probabilitas relatif tempat yang paling cocok dalam daftar tempat yang dikembalikan untuk permintaan tunggal. Anda tidak dapat membandingkan kemungkinan pada permintaan yang berbeda.
  • Nilai kemungkinan akan berada di antara 0,0 dan 1,0.

Misalnya, untuk menunjukkan 55% kemungkinan bahwa tempat yang benar adalah Tempat A, dan kemungkinan 35% bahwa itu adalah Tempat B, respons memiliki dua anggota, Tempatkan 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.