Pakiet Places SDK na Androida zapewnia aplikacji bogate informacje informacje o miejscach, w tym ich nazwę i adres, położenie geograficzne, lokalizacja określona za pomocą współrzędnych geograficznych, rodzaj miejsca (np. klub nocny, sklep zoologiczny, muzeum). Aby uzyskać dostęp do tych informacji dla konkretnego miejsca, możesz użyć identyfikatora miejsca, stałego identyfikatora, wskazuje miejsce.
Informacje o miejscu
Place
dostarcza informacji o konkretnym miejscu. Możesz zdobyć
Place
możesz użyć w następujący sposób:
- Zadzwoń do nas
PlacesClient.fetchPlace()
– Przeczytaj przewodnik znajdowanie miejsca na podstawie identyfikatora. - Zadzwoń do nas
PlacesClient.findCurrentPlace()
– Przeczytaj przewodnik podanie aktualnego miejsca.
Zgłaszając prośbę o dane miejsce, musisz określić, które dane o nim mają zostać zwrócone. W tym celu przekaż listę Place.Field określające dane do zwrócenia. Warto rozważyć tę listę, ponieważ ma ona wpływ na kosztu każdego żądania.
Ponieważ wyniki z danymi miejsc nie mogą być puste, tylko wyniki miejsc z danymi są
zwrócone (jeśli na przykład żądane miejsce nie ma zdjęć, funkcja photos
nie występuje w wyniku).
Poniższy przykład przekazuje listę 3 Wartości pola Place.Field w celu określenia danych zwracanych przez żądanie:
Kotlin
// Specify the fields to return. val placeFields = listOf(Place.Field.NAME, Place.Field.RATING, Place.Field.OPENING_HOURS)
Java
// Specify the fields to return. final List<Place.Field> placeFields = Arrays.asList(Place.Field.NAME, Place.Field.RATING, Place.Field.OPENING_HOURS);
Dostęp do pól danych obiektów Miejsc
Gdy już uzyskasz obiekt Place
, użyj jego metod, aby uzyskać dostęp do
pola danych określonych w żądaniu. Jeśli w obiekcie Place
brakuje pola,
pokrewna metoda zwraca wartość null. Poniżej przedstawiamy kilka przykładowych metod.
Pełną listę wszystkich metod znajdziesz w
Place
Dokumentacja API.
getAddress()
– adres miejsca w formacie czytelnym dla człowieka .getAddressComponents()
–List
komponentów adresu tego miejsca. Komponenty te są dostarczane w przypadku funkcji wyodrębniania uporządkowanych informacji o adresie miejsca. To przykład wyszukiwania miasta, w którym znajduje się dane miejsce. Nie używaj tych komponenty formatowania adresu; zamiast tego zadzwoń dogetAddress()
, który zapewnia zlokalizowany adres w formacie.getId()
– tekstowy identyfikator miejsca. Odczytano o identyfikatorach miejsc znajdziesz w dalszej części tej strony.getLatLng()
– lokalizacja geograficzna miejsca, określane za pomocą współrzędnych geograficznych.getName()
– nazwa miejsca.getOpeningHours()
–OpeningHours
danego miejsca. Zadzwoń pod numerOpeningHours.getWeekdayText()
, aby zwrócić lista ciągów reprezentujących godziny otwarcia i zamknięcia w poszczególnych dniach w tym tygodniu. WywołajOpeningHours.getPeriods()
, aby zwrócić listęperiod
obiektów z bardziej szczegółowymi informacjami jest taki sam jak dane dostarczone przezgetWeekdayText()
.Obiekt
Place
zawiera teżgetCurrentOpeningHours()
. która zwraca godziny otwarcia miejsca w ciągu najbliższych siedmiu dni,getSecondaryOpeningHours()
, która zwraca dodatkowe godziny otwarcia miejsca w ciągu najbliższych siedmiu dni.isOpen()
– wartość logiczna wskazująca, czy miejsce aktualnie otwartego. Jeśli nie podasz żadnej godziny, domyślną wartością będzie teraz.isOpen
zostaną zwrócone tylko wtedy, gdy zarównoPlace.Field.UTC_OFFSET
, jak iPlace.Field.OPENING_HOURS
są dostępne. Aby zapewnić dokładność wyników, poproś oPlace.Field.BUSINESS_STATUS
iPlace.Field.UTC_OFFSET
pól w pierwotnym żądaniu miejsca. Jeśli prośba nie zostanie wysłana, zakłada się, że firma działa. Aby dowiedzieć się, jak używać tej funkcji, obejrzyj ten film.isOpen
z informacjami o miejscu.
Oto kilka prostych przykładów:
Kotlin
val name = place.name val address = place.address val location = place.latLng
Java
final CharSequence name = place.getName(); final CharSequence address = place.getAddress(); final LatLng location = place.getLatLng();
Znajdź miejsce na podstawie identyfikatora
Identyfikator miejsca to identyfikator tekstowy jednoznacznie identyfikujący miejsce. W
SDK Miejsc dla systemu Android można uzyskać identyfikator miejsca, wywołując
Place.getId()
Usługa autouzupełniania miejsc
zwraca także identyfikator każdego miejsca pasującego do podanego zapytania.
i filtrować. Można zapisać identyfikator miejsca i użyć go do pobrania
Place
możesz zobaczyć go później.
Aby uzyskać miejsce na podstawie identyfikatora, zadzwoń pod numer
PlacesClient.fetchPlace()
zaliczając FetchPlaceRequest
.
Interfejs API zwraca błąd
FetchPlaceResponse
w
Task
FetchPlaceResponse
zawiera
Place
obiekt pasujący do podanego identyfikatora miejsca.
Poniższy przykładowy kod pokazuje wywołanie fetchPlace()
pod numerem
pobrać szczegółowe informacje o wybranym miejscu.
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") } }
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. } });
Uzyskaj stan „Otwarty”
PlacesClient.isOpen(IsOpenRequest request)
zwraca obiekt IsOpenResponse
wskazujący, czy dane miejsce
obecnie otwarte zgodnie z godziną określoną podczas rozmowy.
Ta metoda przyjmuje pojedynczy argument typu IsOpenRequest
, który zawiera:
Place
lub ciąg znaków określający identyfikator miejsca.- Opcjonalna wartość czasu określająca czas w milisekundach od 1970-01-01T00:00:00Z. Jeśli nie podasz żadnej godziny, domyślną wartością będzie teraz.
Ta metoda wymaga, aby w obiekcie Place
znajdowały się te pola:
Place.Field.BUSINESS_STATUS
Place.Field.CURRENT_OPENING_HOURS
Place.Field.OPENING_HOURS
Place.Field.UTC_OFFSET
Jeśli te pola nie są podane w obiekcie Place
lub jeśli podasz identyfikator miejsca,
metoda wykorzystuje
PlacesClient.fetchPlace()
.
aby je pobrać. Więcej informacji o tworzeniu obiektu Place z wymaganymi polami
Więcej informacji: Szczegóły miejsca.
Poniższy przykład pokazuje, czy miejsce jest obecnie otwarte. W tym przykładzie przekażesz tylko
identyfikator miejsca do isOpen()
:
Kotlin
val isOpenCalendar: Calendar = Calendar.getInstance() val placeId = "ChIJD3uTd9hx5kcR1IQvGfr8dbk" val request: IsOpenRequest = try { IsOpenRequest.newInstance(placeId, isOpenCalendar.timeInMillis) } catch (e: IllegalArgumentException) { e.printStackTrace() return } val isOpenTask: Task<IsOpenResponse> = placesClient.isOpen(request) isOpenTask.addOnSuccessListener { response -> val isOpen = response.isOpen } // ...
Java
@NonNull Calendar isOpenCalendar = Calendar.getInstance(); String placeId = "ChIJD3uTd9hx5kcR1IQvGfr8dbk"; IsOpenRequest isOpenRequest; try { isOpenRequest = IsOpenRequest.newInstance(placeId, isOpenCalendar.getTimeInMillis()); } catch (IllegalArgumentException e) { e.printStackTrace(); return; } Task<IsOpenResponse> placeTask = placesClient.isOpen(isOpenRequest); placeTask.addOnSuccessListener( (response) -> isOpen = response.isOpen()); // ...
Następny przykład pokazuje wywoływanie funkcji isOpen()
w miejscu, w którym przekazujesz obiekt Place
.
Obiekt Place
musi zawierać prawidłowy identyfikator miejsca:
Kotlin
val isOpenCalendar: Calendar = Calendar.getInstance() var place: Place val placeId = "ChIJD3uTd9hx5kcR1IQvGfr8dbk" // Specify the required fields for an isOpen request. val placeFields: List<Place.Field> = listOf( Place.Field.BUSINESS_STATUS, Place.Field.CURRENT_OPENING_HOURS, Place.Field.ID, Place.Field.OPENING_HOURS, Place.Field.UTC_OFFSET ) val placeRequest: FetchPlaceRequest = FetchPlaceRequest.newInstance(placeId, placeFields) val placeTask: Task<FetchPlaceResponse> = placesClient.fetchPlace(placeRequest) placeTask.addOnSuccessListener { placeResponse -> place = placeResponse.place val isOpenRequest: IsOpenRequest = try { IsOpenRequest.newInstance(place, isOpenCalendar.timeInMillis) } catch (e: IllegalArgumentException) { e.printStackTrace() return@addOnSuccessListener } val isOpenTask: Task<IsOpenResponse> = placesClient.isOpen(isOpenRequest) isOpenTask.addOnSuccessListener { isOpenResponse -> val isOpen = isOpenResponse.isOpen } // ... } // ...
Java
@NonNull Calendar isOpenCalendar = Calendar.getInstance(); String placeId = "ChIJD3uTd9hx5kcR1IQvGfr8dbk"; // Specify the required fields for an isOpen request. List<Place.Field> placeFields = new ArrayList<>(Arrays.asList( Place.Field.BUSINESS_STATUS, Place.Field.CURRENT_OPENING_HOURS, Place.Field.ID, Place.Field.OPENING_HOURS, Place.Field.UTC_OFFSET )); FetchPlaceRequest request = FetchPlaceRequest.newInstance(placeId, placeFields); Task<FetchPlaceResponse> placeTask = placesClient.fetchPlace(request); placeTask.addOnSuccessListener( (placeResponse) -> { Place place = placeResponse.getPlace(); IsOpenRequest isOpenRequest; try { isOpenRequest = IsOpenRequest.newInstance(place, isOpenCalendar.getTimeInMillis()); } catch (IllegalArgumentException e) { e.printStackTrace(); return; } Task<IsOpenResponse> isOpenTask = placesClient.isOpen(isOpenRequest); isOpenTask.addOnSuccessListener( (isOpenResponse) -> isOpen = isOpenResponse.isOpen()); // ... }); // ...
Wyświetl atrybucję w swojej aplikacji
Gdy aplikacja wyświetla informacje o miejscu, w tym opinie o nim, musi też wyświetlać żadnych informacji o autorze. Więcej informacji: atrybucje.
Więcej informacji o identyfikatorach miejsc
Identyfikator miejsca używany w pakiecie SDK Miejsc dla Androida to ten sam identyfikator tak jak w interfejsie Places API. Każdy identyfikator miejsca może odnosić się tylko do jednego miejsca, ale jedno miejsce może mieć ich więcej jeden identyfikator miejsca. Istnieją też inne okoliczności, które mogą spowodować, że dane miejsce uzyskać nowy identyfikator miejsca. Może się tak na przykład zdarzyć, gdy firma przeniesie się do nowego lokalizacji.
Zamawiając miejsce, podając jego identyfikator, masz pewność, że w odpowiedzi otrzymasz zawsze to samo miejsce (jeśli miejsce ). Pamiętaj jednak, że odpowiedź może zawierać identyfikator miejsca, który inny niż w prośbie.
Więcej informacji: omówienie identyfikatora miejsca.