Aktualne miejsce

Wybierz platformę: Android iOS

Korzystając z pakietu SDK Places dla Androida, możesz odkryć miejsce na aktualnie zgłaszanej lokalizacji urządzenia. Przykłady miejsc: lokalne firmy, ciekawe miejsca i lokalizacje geograficzne.

Uprawnienia

Aby korzystać z biblioteki, nie musisz deklarować żadnych dodatkowych uprawnień w pliku manifestu aplikacji. . Jeśli jednak aplikacja korzysta PlacesClient.findCurrentPlace() musisz poprosić o dostęp do lokalizacji podczas działania.

Jeśli aplikacja nie używa PlacesClient.findCurrentPlace(), wyraźnie usuń parametr Wprowadzono uprawnienia ACCESS_FINE_LOCATION i ACCESS_COARSE_LOCATION przez bibliotekę, dodając do pliku manifestu ten kod:

<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>

Więcej informacji: uprawnień i rozważ użycie EasyPermissions.

Pobierz bieżącą lokalizację

Aby znaleźć lokalną firmę lub inne miejsce, w którym znajduje się urządzenie wykonaj te czynności:

  1. Zadzwoń pod numer ContextCompat.checkSelfPermission aby sprawdzić, czy użytkownik przyznał dostęp do urządzenia lokalizacji. Aplikacja musi też zawierać kod, który prosi użytkownika o zgodę. i obejmowania ich wynikiem. Zobacz Prośba o uprawnienia aplikacji. .
  2. Utwórz FindCurrentPlaceRequest, przekazująca List wartość Place.Fields, określająca typów danych, o które powinna prosić aplikacja.
  3. Zadzwoń pod numer PlacesClient.findCurrentPlace(). zaliczając ten cel: FindCurrentPlaceRequest utworzony w poprzednim krok po kroku.
  4. Pobierz listę elementów PlaceLikelihood z FindCurrentPlaceResponse
.

Pola odpowiadają wynikom wyszukiwania miejsc i są podzielone na trzy kategorie płatności: Podstawowe, kontaktowe i atmosfera. Pola podstawowe są rozliczane według stawki podstawowej i nie wiążą się z dodatkowymi kosztami opłaty. Za pola Kontakt i Atmosfera opłaty są naliczane według wyższej stawki. Więcej informacji na temat sposobu naliczania opłat za żądania danych miejsc. Korzystanie i rozliczenia.

Interfejs API zwraca błąd FindCurrentPlaceResponse w Task Element FindCurrentPlaceResponse zawiera listę PlaceLikelihood. obiektów reprezentujących miejsca, w których prawdopodobnie zostanie umieszczone urządzenie. Dla: każdego miejsca, wynik będzie wskazywać prawdopodobieństwo, jest właściwe. Jeśli nie ma znanego miejsca, lista może być pusta odpowiadający danej lokalizacji urządzenia.

Możesz zadzwonić do nas, PlaceLikelihood.getPlace() aby pobrać Place obiekt PlaceLikelihood.getLikelihood() aby uzyskać ocenę prawdopodobieństwa dla tego miejsca. Im wyższa wartość, tym większa jest prawdopodobne, że dane miejsce będzie najbardziej dopasowane.

Następujący przykładowy kod pobiera listę miejsc, w których znajduje się urządzenie z największym prawdopodobieństwem, oraz rejestruje nazwę i prawdopodobieństwo dla każdego z nich.

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

      

Uwagi dotyczące wartości prawdopodobieństwa:

  • Prawdopodobieństwo podaje prawdopodobieństwo względne miejsca, które jest najlepiej dopasowane do listy zwróconych miejsc dla danego tylko jedno żądanie. Nie można porównywać prawdopodobieństwa dla różnych żądań.
  • Wartość prawdopodobieństwa mieści się w zakresie od 0,0 do 1,0.

Na przykład do reprezentowania 55% prawdopodobieństwa, że prawidłowe miejsce to Miejsce A i 35% prawdopodobieństwa, że będzie to Miejsce B, odpowiedź ma 2 członków, Miejsce A z prawdopodobieństwem 0,55, a miejsce B z prawdopodobieństwem 0,35.

Wyświetl atrybucję w swojej aplikacji

Kiedy aplikacja wyświetla informacje uzyskane z: PlacesClient.findCurrentPlace() aplikacja musi też wyświetlać informacje o autorze utworu. Zobacz dokumentację na stronie atrybucje.