Places SDK สําหรับ Android จะให้ข้อมูลที่สมบูรณ์เกี่ยวกับสถานที่ต่างๆ รวมถึงชื่อและที่อยู่ของสถานที่ ตําแหน่งทางภูมิศาสตร์ที่ระบุเป็นพิกัดละติจูด/ลองจิจูด ประเภทของสถานที่ (เช่น ไนท์คลับ ร้านขายอุปกรณ์สัตว์เลี้ยง พิพิธภัณฑ์) และอื่นๆ หากต้องการเข้าถึงข้อมูลนี้สําหรับสถานที่แห่งใดแห่งหนึ่ง คุณสามารถใช้รหัสสถานที่ซึ่งเป็นตัวระบุที่เสถียรซึ่งระบุสถานที่ได้
รายละเอียดสถานที่
ออบเจ็กต์ Place
ให้ข้อมูลเกี่ยวกับสถานที่เฉพาะ คุณระงับออบเจ็กต์ Place
ได้ด้วยวิธีต่อไปนี้
- โทรหา
PlacesClient.findCurrentPlace()
– ดูคําแนะนําในการ ขอตําแหน่งปัจจุบัน - โทรหา
PlacesClient.fetchPlace()
– ดูคู่มือ เพื่อรับตําแหน่งตามรหัส
เมื่อคุณร้องขอสถานที่ คุณต้องระบุข้อมูลสถานที่ที่จะส่งกลับ โดยให้ส่งรายการของค่า Place.Field ที่ระบุข้อมูลที่ต้องการแสดงกลับมา รายการนี้เป็นข้อควรพิจารณาที่สําคัญ เนื่องจากจะส่งผลต่อค่าใช้จ่ายสําหรับแต่ละคําขอ
เนื่องจากผลลัพธ์ข้อมูลสถานที่ต้องไม่ว่างเปล่า ระบบจะแสดงเฉพาะผลลัพธ์ที่มีข้อมูลเท่านั้น (เช่น หากสถานที่ที่ขอไม่มีรูปภาพ ช่อง photos
จะไม่แสดงในผลลัพธ์)
ตัวอย่างต่อไปนี้ส่งรายการค่า Place.Field 3 ค่าเพื่อระบุข้อมูลที่คําขอส่งกลับ
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)
เมื่อได้รับออบเจ็กต์ Place
แล้ว ให้ใช้เมธอดของออบเจ็กต์เพื่อเข้าถึงช่องข้อมูลที่ระบุไว้ในคําขอ หากออบเจ็กต์ใน Place
ไม่มีข้อมูลในช่อง
เมธอดที่เกี่ยวข้องจะแสดงค่าว่าง ด้านล่างนี้คือตัวอย่างวิธีการบางส่วนที่ใช้ได้
ดูรายการเมธอดทั้งหมดได้ที่การอ้างอิง Place
API
getAddress()
– ที่อยู่ของสถานที่ ในรูปแบบที่มนุษย์อ่านได้getAddressComponents()
–List
ขององค์ประกอบที่อยู่สําหรับสถานที่นี้ องค์ประกอบเหล่านี้มีไว้เพื่อ ดึงข้อมูลที่มีโครงสร้างเกี่ยวกับที่อยู่ของสถ านที่ ตัวอย่างเช่น ค้นหาเมืองที่สถานที่ตั้งอยู่ อย่าใช้คอมโพเนนต์เหล่านี้สําหรับการจัดรูปแบบที่อยู่ แต่ให้เรียกใช้getAddress()
ซึ่งมีที่อยู่ที่จัดรูปแบบแล้วแทนgetId()
– ตัวระบุข้อความของสถานที่ อ่านเพิ่มเติมเกี่ยวกับรหัสสถานที่ในส่วนอื่นๆ ของหน้านี้getLatLng()
– สถานที่ตั้งทางภูมิศาสตร์ของสถ านที่ ระบุเป็นพิกัดละติจูดและลองจิจูดgetName()
– ชื่อสถานที่getOpeningHours()
–OpeningHours
ของสถานที่ เรียกOpeningHours.getWeekdayText()
เพื่อกลับไปที่รายการสตริงที่แสดงเวลาเปิดและปิดสําหรับแต่ละวันของสัปดาห์ โทรหาOpeningHours.getPeriods()
เพื่อส่งกลับรายการออบเจ็กต์period
ที่มีข้อมูลโดยละเอียดยิ่งขึ้นซึ่งเทียบเท่ากับข้อมูลที่getWeekdayText()
ระบุไว้ออบเจ็กต์
Place
ยังมีเมธอดgetCurrentOpeningHours()
ซึ่งแสดงผลเวลาทําการของสถานที่ในอีก 7 วันข้างหน้า และgetSecondaryOpeningHours()
ซึ่งแสดงผลเวลาทําการรองของสถานที่ในอีก 7 วันข้างหน้าisOpen()
– บูลีนที่ระบุว่าสถานที่เปิดอยู่ในขณะนี้หรือไม่ หากไม่ได้ระบุเวลาไว้ ระบบจะใช้ค่าเริ่มต้น ระบบจะแสดงผลisOpen
ต่อเมื่อมีทั้งPlace.Field.UTC_OFFSET
และPlace.Field.OPENING_HOURS
เท่านั้น โปรดขอช่องPlace.Field.BUSINESS_STATUS
และPlace.Field.UTC_OFFSET
ในคําขอสถานที่เดิมของคุณเพื่อให้ผลการค้นหาถูกต้อง หากไม่ได้ร้องขอ จะถือว่าธุรกิจดําเนินกิจการ ดูวิดีโอนี้ซึ่งดูวิธีใช้isOpen
พร้อมรายละเอียดสถานที่
ตัวอย่างง่ายๆ มีดังนี้
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
รับสถานที่ตามรหัส
รหัสสถานที่คือตัวระบุข้อความที่สามารถระบุสถานที่ได้อย่างเฉพาะเจาะจง ใน
Places SDK สําหรับ Android คุณเรียกดูรหัสของสถานที่โดยเรียก
Place.getId()
ได้
บริการเติมข้อความอัตโนมัติยังจะแสดงรหัสสถานที่สําหรับแต่ละสถานที่ที่ตรงกับคําค้นหาและตัวกรองที่จัดเตรียมไว้ให้ด้วย คุณจัดเก็บรหัสสถานที่และใช้เพื่อเรียกข้อมูลออบเจ็กต์ Place
ได้อีกครั้งในภายหลัง
หากต้องการรับสถานที่โดยใช้รหัส โทรหา PlacesClient.fetchPlace()
เพื่อผ่าน FetchPlaceRequest
API จะแสดงผล FetchPlaceResponse
ใน Task
FetchPlaceResponse
มีออบเจ็กต์ Place
ที่ตรงกับรหัสสถานที่ที่ระบุ
ตัวอย่างโค้ดต่อไปนี้แสดงการเรียกใช้ fetchPlace()
เพื่อรับรายละเอียดของตําแหน่งที่ระบุ
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") } }
รับสถานะเปิด
เมธอด PlacesClient.isOpen(IsOpenRequest request)
จะแสดงออบเจ็กต์ IsOpenResponse
ที่ระบุว่าขณะนี้สถานที่เปิดอยู่ตามเวลาที่ระบุในสายไหม
เมธอดนี้ใช้อาร์กิวเมนต์เดียวของประเภท IsOpenRequest
ที่มี:
- ออบเจ็กต์
Place
หรือสตริงที่ระบุรหัสสถานที่ - ค่าเวลาที่ระบุโดยระบุเวลาเป็นมิลลิวินาทีจาก 1970-01-01T00:00:00Z หากไม่ได้ระบุเวลาไว้ ระบบจะใช้ค่าเริ่มต้น
เมธอด Place
ต้องมีช่องต่อไปนี้
Place.Field.BUSINESS_STATUS
Place.Field.CURRENT_OPENING_HOURS
Place.Field.OPENING_HOURS
Place.Field.UTC_OFFSET
หากช่องเหล่านี้ไม่ได้อยู่ในออบเจ็กต์ Place
หรือหากคุณส่งรหัสสถานที่ เมธอดจะใช้ PlacesClient.fetchPlace()
เพื่อเรียกข้อมูล ดูข้อมูลเพิ่มเติมเกี่ยวกับการสร้างออบเจ็กต์ Place ด้วยช่องที่จําเป็น
ได้ที่รายละเอียดสถานที่
ตัวอย่างต่อไปนี้จะตัดสินว่าสถานที่นี้เปิดอยู่ไหม ในตัวอย่างนี้ คุณจะส่ง
รหัสสถานที่ให้กับ 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()); // ...
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 } // ...
ตัวอย่างถัดไปแสดงการเรียกใช้ isOpen()
ซึ่งคุณสามารถส่งผ่านวัตถุ Place
ออบเจ็กต์ Place
ต้องมีรหัสสถานที่ที่ถูกต้อง
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()); // ... }); // ...
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 } // ... } // ...
แสดงแอตทริบิวต์ในแอป
เมื่อแอปแสดงข้อมูลสถานที่ แอปต้องแสดงการระบุแหล่งที่มาด้วย ดูเอกสารประกอบเกี่ยวกับการระบุแหล่งที่มา
ข้อมูลเพิ่มเติมเกี่ยวกับรหัสสถานที่
รหัสสถานที่ที่ใช้ใน Places SDK สําหรับ Android เป็นตัวระบุเดียวกันกับที่ใช้ใน Places API รหัสสถานที่แต่ละรหัสสามารถอ้างถึงสถานที่ได้แห่งเดียว แต่สถานที่ 1 แห่งอาจมีรหัสสถานที่มากกว่า 1 แห่ง มีสถานการณ์อื่นๆ ที่อาจทําให้สถานที่รับรหัสสถานที่ใหม่ เช่น กรณีนี้อาจเกิดขึ้นหากธุรกิจย้ายไปยังสถานที่ตั้งใหม่
เมื่อคุณร้องขอสถานที่โดยการระบุรหัสสถานที่ คุณจะมั่นใจได้ว่าคุณจะได้รับสถานที่เดียวกันในคําตอบเสมอ (หากสถานที่ดังกล่าวยังคงอยู่) อย่างไรก็ตาม โปรดทราบว่าการตอบกลับอาจมีรหัสสถานที่ที่แตกต่างจากรหัสในคําขอ
ดูข้อมูลเพิ่มเติมได้ที่ภาพรวมรหัสสถานที่