Pakiet Places SDK na Androida zapewnia Twojej aplikacji pełne informacje o miejscach, w tym nazwę i adres, położenie geograficzne podane jako współrzędne geograficzne, rodzaj miejsca (np. klub nocny, sklep zoologiczny i muzeum). Aby uzyskać dostęp do tych informacji o konkretnym miejscu, możesz użyć identyfikatora miejsca – stałego identyfikatora, który jednoznacznie identyfikuje miejsce.
Szczegóły miejsca
Obiekt Place
zawiera informacje o konkretnym miejscu. Obiekt Place
możesz zablokować na kilka sposobów:
- Zadzwoń pod numer
PlacesClient.findCurrentPlace()
– przewodnik pobiera bieżące miejsce. - Zadzwoń pod numer
PlacesClient.fetchPlace()
– przewodnik po uzyskiwaniu miejsca według identyfikatora.
W prośbie o miejsce musisz określić, które dane miejsca chcesz zwrócić. Aby to zrobić, przekaż listę wartości Place.Field określających dane do zwrócenia. Ta lista jest ważna, ponieważ wpływa na koszt każdego żądania.
Wyniki wyszukiwania danych miejsc nie mogą być puste, dlatego zwracane są tylko wyniki miejsc z danymi (na przykład jeśli żądane miejsce nie zawiera zdjęć, w wyniku nie będzie pola photos
).
Ten przykład przekazuje listę 3 wartości Place.Field, by określić dane zwracane przez żądanie:
Java
// Specify the fields to return. final ListplaceFields = Arrays.asList(Place.Field.NAME, Place.Field.RATING, Place.Field.OPENING_HOURS);
Kotlin
// Specify the fields to return. val placeFields = listOf(Place.Field.NAME, Place.Field.RATING, Place.Field.OPENING_HOURS)
Po uzyskaniu obiektu Place
użyj metod obiektu, aby pobrać dane miejsca.
Poniżej znajdziesz przykłady kilku dostępnych metod. Pełną listę wszystkich metod znajdziesz w dokumentacji API Place
.
getAddress()
– adres miejsca w formacie czytelnym dla człowieka.getAddressComponents()
–List
komponentów adresu tego miejsca. Komponenty te są używane do wyodrębniania uporządkowanych informacji o adresie miejsca, np. poprzez znalezienie miasta, w którym się ono znajduje. Nie używaj tych komponentów do formatowania adresu. Zamiast tego wywołajgetAddress()
, który zawiera zlokalizowany format adresu.getID()
– identyfikator tekstowy miejsca. Więcej informacji o identyfikatorach miejsc znajdziesz w dalszej części strony.getLatLng()
– położenie geograficzne miejsca określone jako współrzędne geograficzne.getName()
– nazwa miejsca;getOpeningHours()
–OpeningHours
miejsca. WywołajOpeningHours.getWeekdayText()
, aby wyświetlić listę ciągów znaków reprezentujących godziny otwarcia i zamknięcia w każdym dniu tygodnia. WywołajOpeningHours.getPeriods()
, aby wyświetlić listę obiektówperiod
z bardziej szczegółowymi informacjami odpowiednikami danych udostępnionych przezgetWeekdayText()
. Uwaga: jeśli miejsce jest zawsze otwarte, przedział czasu jest przedstawiony jako niedziela o północy, acloseEvent
ma wartość NULL.isOpen()
– wartość logiczna wskazująca, czy dane miejsce jest obecnie otwarte. Jeśli nie określisz czasu, domyślną wartością będzie teraz. WartośćisOpen
zostanie zwrócona tylko wtedy, gdy będą dostępne właściwościPlace.Field.UTC_OFFSET
iPlace.Field.OPENING_HOURS
. Aby zapewnić dokładne wyniki, poproś o polaPlace.Field.BUSINESS_STATUS
iPlace.Field.UTC_OFFSET
w pierwotnym żądaniu miejsca. W przypadku braku prośby zakłada się, że firma działa. Aby dowiedzieć się, jak korzystać ze znacznikówisOpen
w przypadku szczegółów miejsca, obejrzyj ten film.
Oto kilka prostych przykładów:
Java
final CharSequence name = place.getName(); final CharSequence address = place.getAddress(); final LatLng location = place.getLatLng();
Kotlin
val name = place.name val address = place.address val location = place.latLng
Pobierz miejsce według identyfikatora
Identyfikator miejsca to identyfikator tekstowy, który jednoznacznie identyfikuje miejsce. W pakiecie Places SDK dla Androida możesz pobrać identyfikator miejsca, wywołując opcję Place.getId()
.
Usługa autouzupełniania miejsc zwraca też identyfikator miejsca dla każdego miejsca pasującego do dostarczonego zapytania i filtra. Możesz zapisać identyfikator miejsca i użyć go do ponownego pobrania obiektu Place
.
Aby uzyskać miejsce według identyfikatora, wywołaj PlacesClient.fetchPlace()
, przekazując FetchPlaceRequest
.
Interfejs API zwróci błąd FetchPlaceResponse
w obiekcie Task
.
FetchPlaceResponse
zawiera obiekt Place
pasujący do podanego identyfikatora miejsca.
Poniższy przykładowy kod pokazuje, jak wywołać fetchPlace()
, aby uzyskać szczegółowe informacje o określonym miejscu.
Java
// Define a Place ID. final String placeId = "INSERT_PLACE_ID_HERE"; // Specify the fields to return. final List<Place.Field> placeFields = Arrays.asList(Place.Field.ID, Place.Field.NAME); // Construct a request object, passing the place ID and fields array. final FetchPlaceRequest request = FetchPlaceRequest.newInstance(placeId, placeFields); placesClient.fetchPlace(request).addOnSuccessListener((response) -> { Place place = response.getPlace(); Log.i(TAG, "Place found: " + place.getName()); }).addOnFailureListener((exception) -> { if (exception instanceof ApiException) { final ApiException apiException = (ApiException) exception; Log.e(TAG, "Place not found: " + exception.getMessage()); final int statusCode = apiException.getStatusCode(); // TODO: Handle error with given status code. } });
Kotlin
// Define a Place ID. val placeId = "INSERT_PLACE_ID_HERE" // Specify the fields to return. val placeFields = listOf(Place.Field.ID, Place.Field.NAME) // Construct a request object, passing the place ID and fields array. val request = FetchPlaceRequest.newInstance(placeId, placeFields) placesClient.fetchPlace(request) .addOnSuccessListener { response: FetchPlaceResponse -> val place = response.place Log.i(PlaceDetailsActivity.TAG, "Place found: ${place.name}") }.addOnFailureListener { exception: Exception -> if (exception is ApiException) { Log.e(TAG, "Place not found: ${exception.message}") val statusCode = exception.statusCode TODO("Handle error with given status code") } }
Wyświetlanie atrybucji w aplikacji
Gdy aplikacja wyświetla informacje o miejscu, musi też wyświetlać atrybucje. Zobacz dokumentację dotyczącą atrybucji.
Więcej informacji o identyfikatorach miejsc
Identyfikator miejsca używany w pakiecie SDK Miejsc na Androida jest taki sam jak identyfikator w interfejsie API Miejsc. Każdy identyfikator miejsca może odnosić się tylko do jednego miejsca, ale jedno miejsce może mieć ich więcej. Są inne okoliczności, które mogą spowodować, że miejsce otrzyma nowy identyfikator miejsca. Może się tak na przykład zdarzyć, gdy firma przejdzie na nową lokalizację.
Gdy poprosisz o miejsce, podając identyfikator miejsca, możesz mieć pewność, że w odpowiedzi zawsze znajdziesz to samo miejsce (jeśli dane miejsce nadal istnieje). Pamiętaj jednak, że odpowiedź może zawierać identyfikator miejsca inny niż identyfikator w prośbie.
Więcej informacji znajdziesz w opisie identyfikatora miejsca.