Places SDK for Android 為應用程式提供豐富的資訊 地點的相關資訊,包括地點的名稱和地址、 指定經緯度座標的位置,以及地點類型 (例如 例如夜店、寵物店、博物館等如要存取這項資訊 特定地點時,您可以使用地點 ID,這是能明確定義 識別地點。
地點詳細資訊
Place
敬上
物件提供特定地點的相關資訊。您可以取得
Place
敬上
物件
- 致電
PlacesClient.fetchPlace()
敬上 – 請參閱 使用 ID 取得地點。 - 致電
PlacesClient.findCurrentPlace()
敬上 – 請參閱 取得目前地點。
要求地點時,必須指定要傳回的地點資料。如要這麼做,請將 Place.Field 用於指定要傳回的資料值。這份清單很重要,因為這會影響 單次要求的費用。
由於地點資料結果不可空白,因此只有包含資料的地點結果才會
會傳回 (例如,如果要求的地點沒有相片,則 photos
;
以下範例傳送 Place.Field 值 指定要求傳回的資料:
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);
存取地點物件資料欄位
取得 Place
物件後,請使用物件的方法存取
資料欄位。如果 Place
物件缺少這個欄位,
相關的方法會傳回空值以下列舉幾種可用的方法。
如需所有方法的完整清單,請參閱
Place
敬上
API 參考資料。
getAddress()
:地點的地址 (人類可讀) 格式。getAddressComponents()
- AList
這裡所說的地址元件這些元件是針對 是擷取地點地址的結構化資訊, 範例:尋找地點所在的城市。請勿使用 地址格式元件而是呼叫getAddress()
。 ,提供本地化格式化的地址。getId()
:地點的文字 ID。已讀 進一步瞭解本頁其餘部分。getLatLng()
- 地點的地理位置。 以經緯度座標表示。getName()
- 地點的名稱。getOpeningHours()
-OpeningHours
地點。呼叫OpeningHours.getWeekdayText()
以傳回 代表 一整週。呼叫OpeningHours.getPeriods()
以傳回period
物件,其中包含更詳細的資訊 相當於getWeekdayText()
提供的資料。Place
物件也包含getCurrentOpeningHours()
方法,會傳回地點未來七天的營業時間,且getSecondaryOpeningHours()
,傳回地點在未來 7 天內的次要營業時間。isOpen()
:指出地點是否為布林值的布林值 目前開啟的函式如果您未指定時間,系統會採用預設值。isOpen
只有在Place.Field.UTC_OFFSET
和Place.Field.OPENING_HOURS
可供使用。確保準確性 結果,請要求Place.Field.BUSINESS_STATUS
和 原始地點要求中有Place.Field.UTC_OFFSET
個欄位。 如未提出要求,我們會假設商家運作正常。 歡迎觀看這部影片,瞭解使用方式。 包含 Place Details 的isOpen
。
以下是一些簡單的範例:
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();
透過 ID 取得地點
地點 ID 是用來識別特定地點的文字 ID,於
Places SDK for Android,您可以呼叫
Place.getId()
。
Place Autocomplete 服務
也會傳回與所提供搜尋查詢相符的每個地點的地點 ID
和篩選器您可以儲存地點 ID,並使用它來擷取
Place
敬上
物件。
如要依 ID 取得地點,請呼叫
PlacesClient.fetchPlace()
、
傳遞 FetchPlaceRequest
。
API 會傳回
FetchPlaceResponse
敬上
風格
Task
。
FetchPlaceResponse
敬上
包含
Place
。
物件。
以下程式碼範例顯示呼叫 fetchPlace()
到
取得指定地點的詳細資料
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. } });
取得營業狀態
PlacesClient.isOpen(IsOpenRequest request)
方法會傳回 IsOpenResponse
物件,指出地點是否
目前是以呼叫中指定的時間為準。
這個方法會使用 IsOpenRequest
類型的單一引數,其中包含:
Place
物件,或是指定地點 ID 的字串。- 選用時間值,以毫秒為單位從 1970-01-01T00:00:00Z 指定時間。如果您未指定時間,系統會採用預設值。
使用這個方法時,Place
物件必須具有下列欄位:
Place.Field.BUSINESS_STATUS
Place.Field.CURRENT_OPENING_HOURS
Place.Field.OPENING_HOURS
Place.Field.UTC_OFFSET
如果 Place
物件中未提供這些欄位,或是您傳遞的是地點 ID,
方法使用的
PlacesClient.fetchPlace()
以便擷取。如需進一步瞭解如何使用必要欄位建立 Place 物件,
請參閱「Place Details」。
下例決定地點目前是否營業中。在這個例子中,
至 isOpen()
的地點 ID:
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()); // ...
下例示範如何呼叫 isOpen()
,以及傳遞 Place
物件。
Place
物件必須包含有效的地點 ID:
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()); // ... }); // ...
在應用程式中顯示作者資訊
當應用程式顯示地點資訊 (包括地點評論) 時,應用程式也必須顯示 所有作者資訊。若需更多資訊,請參閲 作者資訊。
進一步瞭解地點 ID
Places SDK for Android 中使用的地點 ID 是相同的 ID 在 Places API 中使用時相同。 每個地點 ID 只能代表一個地點,但一個地點可以有多個地點 多個地點 ID還有其他情況可能會導致地點 取得新的地點 ID舉例來說,如果商家換了新店,可能就會發生這種情形 或 HTTP/HTTPS 位置
指定地點 ID 來要求地點時, 您會在回覆中收到相同位置 (如果地點仍存在 存在)。不過請注意,回應中可能包含地點 ID, 與要求中的編號不同
詳情請參閱 地點 ID 總覽。