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:
- 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. . - Utwórz
FindCurrentPlaceRequest
, przekazującaList
wartośćPlace.Field
s, określająca typów danych, o które powinna prosić aplikacja. - Zadzwoń pod numer
PlacesClient.findCurrentPlace()
. zaliczając ten cel:FindCurrentPlaceRequest
utworzony w poprzednim krok po kroku. - Pobierz listę elementów
PlaceLikelihood
zFindCurrentPlaceResponse
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.