Current Place

Tetap teratur dengan koleksi Simpan dan kategorikan konten berdasarkan preferensi Anda.
Pilih platform: Android iOS

Dengan Places SDK for Android, Anda dapat menemukan tempat tersebut di lokasi perangkat yang dilaporkan saat ini. Contoh tempat meliputi bisnis lokal, lokasi menarik, dan lokasi geografis.

Izin

Untuk menggunakan library, Anda tidak perlu mendeklarasikan izin tambahan apa pun dalam manifes aplikasi, karena library tersebut mendeklarasikan semua izin yang digunakannya dalam manifes. Namun, jika aplikasi menggunakan PlacesClient.findCurrentPlace(), Anda harus meminta izin akses lokasi pada runtime.

Jika aplikasi Anda tidak menggunakan PlacesClient.findCurrentPlace(), hapus izin ACCESS_FINE_LOCATION secara eksplisit yang diperkenalkan oleh library ini 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"/>
    ...
</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:

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

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

API akan menampilkan FindCurrentPlaceResponse dalam Task. FindCurrentPlaceResponse berisi daftar objek PlaceLikelihood yang mewakili tempat perangkat kemungkinan berada. Untuk setiap tempat, hasilnya mencakup indikasi kemungkinan bahwa tempat tersebut adalah tempat yang tepat. Daftar tersebut mungkin kosong, jika tidak ada tempat yang diketahui yang 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 kemungkinan bahwa tempat tersebut adalah yang paling cocok.

Contoh kode berikut mengambil daftar tempat yang kemungkinan besar merupakan lokasi perangkat, dan mencatat nama serta kemungkinan untuk setiap tempat.

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();
}

      

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()
}

      

Catatan tentang nilai kemungkinan:

  • Kemungkinan ini memberikan probabilitas relatif tempat yang paling cocok dalam daftar tempat yang ditampilkan untuk satu permintaan. Anda tidak dapat membandingkan kemungkinan di berbagai permintaan.
  • Nilai kemungkinan akan berada antara 0.0 dan 1.0.

Misalnya, untuk merepresentasikan kemungkinan 55% bahwa tempat yang benar adalah Tempat A, dan kemungkinan 35% bahwa 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.