คู่มือนี้จะอธิบายการเปลี่ยนแปลงระหว่างไลบรารีความเข้ากันได้ของ Places กับ Places SDK สําหรับ Android แบบสแตนด์อโลนใหม่ หากคุณใช้ไลบรารีความเข้ากันได้ของ Places แทนการย้ายข้อมูลไปยัง Places SDK สําหรับ Android เวอร์ชันใหม่ คู่มือนี้แสดงวิธีอัปเดตโครงการของคุณให้ใช้ Places SDK สําหรับ Android เวอร์ชันใหม่
วิธีเดียวที่จะเข้าถึงฟีเจอร์และแก้ไขข้อบกพร่องใน Places SDK สําหรับแอนดรอยด์ เวอร์ชัน 2.6.0 คือการใช้ Places SDK สําหรับ Android Google ขอแนะนําให้อัปเดตจากไลบรารีความเข้ากันได้ไปเป็น Places SDK เวอร์ชันใหม่สําหรับ Android โดยเร็วที่สุด
มีอะไรเปลี่ยนแปลงบ้าง
การเปลี่ยนแปลงในด้านต่างๆ ที่สําคัญมีดังต่อไปนี้
- Places SDK เวอร์ชันใหม่สําหรับ Android มีการเผยแพร่เป็นไลบรารีของไคลเอ็นต์แบบคงที่ ก่อนเดือนมกราคม 2019 Places SDK สําหรับ Android ได้พร้อมให้ใช้งานผ่านบริการ Google Play นับจากนั้นมา เราก็ได้ให้บริการไลบรารีที่ใช้ร่วมกันได้ของ Places เพื่อช่วยให้คุณเปลี่ยนไปใช้ Places API สําหรับ Android ได้ง่ายขึ้น
- โดยมีวิธีการใหม่ทั้งหมด
- ตอนนี้มาสก์ของช่องรองรับเมธอดที่แสดงรายละเอียดสถานที่แล้ว คุณสามารถใช้มาสก์ของช่องเพื่อระบุประเภทของข้อมูลสถานที่ที่จะส่งคืนได้
- รหัสสถานะที่ใช้ในการรายงานข้อผิดพลาดได้รับการปรับปรุงแล้ว
- การเติมข้อความอัตโนมัติรองรับโทเค็นเซสชันแล้ว
- เครื่องมือเลือกสถานที่ไม่มีให้บริการแล้ว
เกี่ยวกับไลบรารีความเข้ากันได้ของ Places
ในเดือนมกราคม 2019 พร้อมการเปิดตัว Places SDK สําหรับ Android เวอร์ชัน 1.0
Google ได้มอบไลบรารีความเข้ากันได้เพื่อช่วยย้ายข้อมูลจาก
Places SDK สําหรับ Android เวอร์ชัน Google Play ที่เลิกใช้งานแล้ว
(com.google.android.gms:play-services-places
)
ไลบรารีความเข้ากันได้นี้มีให้ชั่วคราวเพื่อเปลี่ยนเส้นทางและแปลการเรียก API ที่มุ่งเป้าไปที่เวอร์ชันบริการ Google Play เป็นเวอร์ชันสแตนด์อโลนเวอร์ชันใหม่จนกว่านักพัฒนาซอฟต์แวร์จะย้ายข้อมูลโค้ดของตนไปใช้ชื่อใหม่ใน SDK แบบสแตนด์อโลนได้ สําหรับ Places SDK สําหรับ Android แต่ละเวอร์ชัน ที่เผยแพร่จากเวอร์ชัน 1.0 ถึงเวอร์ชัน 2.6.0 ได้มีการเผยแพร่ไลบรารีความเข้ากันได้ของ Places เวอร์ชันที่สอดคล้องกันเพื่อให้มีฟังก์ชันการทํางานที่เทียบเท่ากัน
การเลิกใช้และเลิกใช้ไลบรารีความเข้ากันได้ของ Places
เราจะเลิกใช้งานไลบรารีความเข้ากันได้ของ Places SDK สําหรับ Android ทุกเวอร์ชันในวันที่ 31 มีนาคม 2022 เวอร์ชัน 2.6.0 เป็นเวอร์ชันล่าสุด ของไลบรารีความเข้ากันได้ของ Places วิธีเดียวที่จะเข้าถึงฟีเจอร์และแก้ไขข้อบกพร่องใน Places SDK สําหรับ Android เวอร์ชัน 2.6.0 ก็คือใช้ Places SDK สําหรับ Android
Google ขอแนะนําให้คุณย้ายข้อมูลไปยัง Places SDK สําหรับ Android เพื่อเข้าถึงคุณลักษณะใหม่และการแก้ไขข้อบกพร่องที่สําคัญสําหรับรุ่นที่สูงกว่าเวอร์ชัน 2.6.0 หากคุณใช้ไลบรารีความเข้ากันได้อยู่ในขณะนี้ ให้ทําตามขั้นตอนด้านล่างในส่วน ติดตั้ง Places SDK สําหรับ Android เพื่อย้ายไปยัง Places SDK สําหรับ Android
ติดตั้งไลบรารีของไคลเอ็นต์
Places SDK เวอร์ชันใหม่สําหรับ Android มีการเผยแพร่เป็นไลบรารีของไคลเอ็นต์แบบคงที่
ใช้ Maven เพื่อเพิ่ม Places SDK สําหรับ Android ไปยังโครงการ Android Studio
หากคุณกําลังใช้ไลบรารีความเข้ากันได้ของ Places ให้ทําดังนี้
แทนที่บรรทัดต่อไปนี้ในส่วน
dependencies
:implementation 'com.google.android.libraries.places:places-compat:X.Y.Z'
ด้วยบรรทัดนี้ที่จะเปลี่ยนเป็น Places SDK สําหรับแอนดรอยด์:
implementation 'com.google.android.libraries.places:places:3.1.0'
หากคุณกําลังใช้ Places SDK เวอร์ชันบริการของ Play สําหรับแอนดรอยด์ ให้ทําดังนี้
แทนที่บรรทัดต่อไปนี้ในส่วน
dependencies
:implementation 'com.google.android.gms:play-services-places:X.Y.Z'
ด้วยบรรทัดนี้ที่จะเปลี่ยนเป็น Places SDK สําหรับแอนดรอยด์:
implementation 'com.google.android.libraries.places:places:3.1.0'
ซิงค์โปรเจ็กต์ Gradle
ตั้งค่า
minSdkVersion
สําหรับโปรเจ็กต์แอปพลิเคชันของคุณเป็น 16 หรือสูงกว่าอัปเดตเนื้อหา "ขับเคลื่อนโดย Google" โดยทําดังนี้
@drawable/powered_by_google_light // OLD @drawable/places_powered_by_google_light // NEW @drawable/powered_by_google_dark // OLD @drawable/places_powered_by_google_dark // NEW
สร้างแอป หากคุณเห็นข้อผิดพลาดในการสร้างเนื่องจากการแปลงเป็น Places SDK สําหรับ Android โปรดดูส่วนด้านล่างสําหรับข้อมูลเกี่ยวกับการแก้ไขข้อผิดพลาดเหล่านี้
เริ่มต้นไคลเอ็นต์ Places SDK ใหม่
เริ่มต้นไคลเอ็นต์ Places SDK ใหม่ตามที่แสดงในตัวอย่างต่อไปนี้
// Add an import statement for the client library.
import com.google.android.libraries.places.api.Places;
...
// Initialize Places.
Places.initialize(getApplicationContext(), apiKey);
// Create a new Places client instance.
PlacesClient placesClient = Places.createClient(this);
รหัสสถานะ
รหัสสถานะสําหรับข้อผิดพลาดขีดจํากัด QPS มีการเปลี่ยนแปลง ข้อผิดพลาดขีดจํากัด QPS จะส่งกลับ
ผ่านทาง PlaceStatusCodes.OVER_QUERY_LIMIT
ไม่จํากัด QPD แล้ว
มีการเพิ่มรหัสสถานะต่อไปนี้:
REQUEST_DENIED
— คําขอถูกปฏิเสธ เหตุผลที่เป็นไปได้สำหรับความแตกต่างดังกล่าวมีดังต่อไปนี้- ไม่ได้ระบุคีย์ API
- ระบุคีย์ API ที่ไม่ถูกต้อง
- ไม่ได้เปิดใช้ Places API ใน Cloud Console
- มีการระบุคีย์ API ที่มีข้อจํากัดของคีย์ไม่ถูกต้อง
INVALID_REQUEST
— คําขอไม่ถูกต้องเนื่องจากไม่มีอาร์กิวเมนต์หรืออาร์กิวเมนต์ไม่ถูกต้องNOT_FOUND
- ไม่พบผลการค้นหาในคําขอที่ระบุ
วิธีการใหม่
Places SDK เวอร์ชันใหม่สําหรับ Android ขอแนะนําวิธีการใหม่ๆ ทั้งหมดที่ออกแบบมาเพื่อความสอดคล้องกัน ทุกวิถีใหม่ต่อไปนี้
- ปลายทางไม่ได้ใช้คํากริยา
get
อีกต่อไป - ออบเจ็กต์คําขอและการตอบสนองใช้ชื่อเดียวกันกับเมธอดของไคลเอ็นต์ที่เกี่ยวข้อง
- ขณะนี้ออบเจ็กต์คําขอมีเครื่องมือสร้างแล้ว พารามิเตอร์ที่จําเป็นจะถูกส่งผ่านเป็นพารามิเตอร์ เครื่องมือสร้างคําขอ
- ระบบจะไม่ใช้บัฟเฟอร์อีกต่อไป
หัวข้อนี้จะแนะนําวิธีใหม่และแสดงวิธีการทํางาน
ดึงข้อมูลสถานที่ตามรหัส
ใช้ fetchPlace()
เพื่อดูรายละเอียดเกี่ยวกับสถานที่นั้นๆ fetchPlace()
ทํางานคล้ายกับ
getPlaceById()
ทําตามขั้นตอนต่อไปนี้เพื่อดึงข้อมูลสถานที่
เรียก
fetchPlace()
โดยส่งออบเจ็กต์FetchPlaceRequest
ที่ระบุรหัสสถานที่และรายการช่องที่ระบุข้อมูลสถานที่เพื่อกลับมา// Define a Place ID. String placeId = "INSERT_PLACE_ID_HERE"; // Specify the fields to return. List<Place.Field> placeFields = Arrays.asList(Place.Field.ID, Place.Field.NAME); // Construct a request object, passing the place ID and fields array. FetchPlaceRequest request = FetchPlaceRequest.builder(placeId, placeFields) .build();
โทรหา
addOnSuccessListener()
เพื่อจัดการFetchPlaceResponse
ได้รับ ผลลัพธ์Place
รายการเดียว// Add a listener to handle the response. placesClient.fetchPlace(request).addOnSuccessListener((response) -> { Place place = response.getPlace(); Log.i(TAG, "Place found: " + place.getName()); }).addOnFailureListener((exception) -> { if (exception instanceof ApiException) { ApiException apiException = (ApiException) exception; int statusCode = apiException.getStatusCode(); // Handle error with given status code. Log.e(TAG, "Place not found: " + exception.getMessage()); } });
ดึงข้อมูลรูปภาพสถานที่
ใช้ fetchPhoto()
เพื่อรับรูปภาพสถานที่ fetchPhoto()
จะแสดงรูปภาพของสถานที่ รูปแบบในการส่งคําขอรูปภาพได้รับการปรับให้เรียบง่ายขึ้น ขณะนี้คุณสามารถขอ PhotoMetadata
ได้โดยตรงจากออบเจ็กต์ Place
โดยไม่ต้องมีคําขอแยกต่างหากอีกต่อไป
รูปภาพมีความกว้างหรือความสูงได้สูงสุด 1600 พิกเซล fetchPhoto()
ทํางานคล้ายกับ getPhoto()
โปรดทําตามขั้นตอนต่อไปนี้เพื่อดึงข้อมูลรูปภาพสถานที่
ตั้งค่าการโทรไปยัง
fetchPlace()
อย่าลืมใส่ช่องPHOTO_METADATAS
ในคําขอ ดังนี้List<Place.Field> fields = Arrays.asList(Place.Field.PHOTO_METADATAS);
รับออบเจ็กต์สถานที่ (ตัวอย่างนี้ใช้
fetchPlace()
แต่คุณยังใช้findCurrentPlace()
ได้ด้วย)FetchPlaceRequest placeRequest = FetchPlaceRequest.builder(placeId, fields).build();
เพิ่ม
OnSuccessListener
เพื่อรับข้อมูลเมตาของรูปภาพจากPlace
ในFetchPlaceResponse
แล้วใช้ข้อมูลเมตาของรูปภาพที่ได้เพื่อรับบิตแมปและข้อความการระบุแหล่งที่มาplacesClient.fetchPlace(placeRequest).addOnSuccessListener((response) -> { Place place = response.getPlace(); // Get the photo metadata. PhotoMetadata photoMetadata = place.getPhotoMetadatas().get(0); // Get the attribution text. String attributions = photoMetadata.getAttributions(); // Create a FetchPhotoRequest. FetchPhotoRequest photoRequest = FetchPhotoRequest.builder(photoMetadata) .setMaxWidth(500) // Optional. .setMaxHeight(300) // Optional. .build(); placesClient.fetchPhoto(photoRequest).addOnSuccessListener((fetchPhotoResponse) -> { Bitmap bitmap = fetchPhotoResponse.getBitmap(); imageView.setImageBitmap(bitmap); }).addOnFailureListener((exception) -> { if (exception instanceof ApiException) { ApiException apiException = (ApiException) exception; int statusCode = apiException.getStatusCode(); // Handle error with given status code. Log.e(TAG, "Place not found: " + exception.getMessage()); } }); });
ค้นหาสถานที่จากตําแหน่งของผู้ใช้
ใช้ findCurrentPlace()
เพื่อค้นหาตําแหน่งปัจจุบันของอุปกรณ์ของผู้ใช้ findCurrentPlace()
จะแสดงรายการ PlaceLikelihood
ที่บ่งชี้สถานที่ที่อุปกรณ์ของผู้ใช้น่าจะอยู่มากที่สุด findCurrentPlace()
ทํางานคล้ายกับ getCurrentPlace()
ทําตามขั้นตอนต่อไปนี้เพื่อดูตําแหน่งปัจจุบันของอุปกรณ์ของผู้ใช้:
ตรวจสอบว่าแอปขอสิทธิ์
ACCESS_FINE_LOCATION
และACCESS_WIFI_STATE
ผู้ใช้ต้องให้สิทธิ์เข้าถึงตําแหน่งของอุปกรณ์ปัจจุบัน โปรดดูรายละเอียดในขอสิทธิ์สําหรับแอปสร้าง
FindCurrentPlaceRequest
รวมถึงรายการประเภทข้อมูลสถานที่ที่จะส่งคืน// Use fields to define the data types to return. List<Place.Field> placeFields = Arrays.asList(Place.Field.NAME); // Use the builder to create a FindCurrentPlaceRequest. FindCurrentPlaceRequest request = FindCurrentPlaceRequest.builder(placeFields).build();
เรียกใช้ findCurrentPlace และจัดการการตอบกลับโดยให้ตรวจสอบก่อนว่าผู้ใช้ได้ให้สิทธิ์ในการใช้ตําแหน่งของอุปกรณ์แล้ว
// Call findCurrentPlace and handle the response (first check that the user has granted permission). if (ContextCompat.checkSelfPermission(this, ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) { placesClient.findCurrentPlace(request).addOnSuccessListener(((response) -> { for (PlaceLikelihood placeLikelihood : response.getPlaceLikelihoods()) { Log.i(TAG, String.format("Place '%s' has likelihood: %f", placeLikelihood.getPlace().getName(), placeLikelihood.getLikelihood())); textView.append(String.format("Place '%s' has likelihood: %f\n", placeLikelihood.getPlace().getName(), placeLikelihood.getLikelihood())); } })).addOnFailureListener((exception) -> { 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(); }
ค้นหาการคาดคะเนการเติมข้อความอัตโนมัติ
ใช้ findAutocompletePredictions()
เพื่อแสดงผลการคาดคะเนสถานที่ตามคําค้นหาของผู้ใช้
findAutocompletePredictions()
ทํางานคล้ายกับ getAutocompletePredictions()
ตัวอย่างต่อไปนี้แสดงการเรียกใช้ findAutocompletePredictions()
// Create a new token for the autocomplete session. Pass this to FindAutocompletePredictionsRequest,
// and once again when the user makes a selection (for example when calling fetchPlace()).
AutocompleteSessionToken token = AutocompleteSessionToken.newInstance();
// Create a RectangularBounds object.
RectangularBounds bounds = RectangularBounds.newInstance(
new LatLng(-33.880490, 151.184363),
new LatLng(-33.858754, 151.229596));
// Use the builder to create a FindAutocompletePredictionsRequest.
FindAutocompletePredictionsRequest request = FindAutocompletePredictionsRequest.builder()
// Call either setLocationBias() OR setLocationRestriction().
.setLocationBias(bounds)
//.setLocationRestriction(bounds)
.setCountry("au")
.setTypesFilter(Arrays.asList(PlaceTypes.ADDRESS))
.setSessionToken(token)
.setQuery(query)
.build();
placesClient.findAutocompletePredictions(request).addOnSuccessListener((response) -> {
for (AutocompletePrediction prediction : response.getAutocompletePredictions()) {
Log.i(TAG, prediction.getPlaceId());
Log.i(TAG, prediction.getPrimaryText(null).toString());
}
}).addOnFailureListener((exception) -> {
if (exception instanceof ApiException) {
ApiException apiException = (ApiException) exception;
Log.e(TAG, "Place not found: " + apiException.getStatusCode());
}
});
โทเค็นเซสชัน
โทเค็นเซสชันจะจัดกลุ่มคําค้นหาและเฟสการเลือกของการค้นหาของผู้ใช้เป็นเซสชันแยกกันเพื่อจุดประสงค์ในการเรียกเก็บเงิน เราขอแนะนําให้ใช้โทเค็นเซสชัน สําหรับการเติมข้อความอัตโนมัติทั้งหมด เซสชันจะเริ่มต้นเมื่อผู้ใช้เริ่มพิมพ์คําค้นหา และจบลงเมื่อเลือกสถานที่ แต่ละเซสชันจะมีการค้นหาได้หลายรายการ ตามด้วยการเลือกสถานที่ 1 แห่ง เมื่อสิ้นสุดเซสชัน โทเค็นจะใช้งานไม่ได้อีกต่อไป แอปของคุณต้องสร้างโทเค็นใหม่สําหรับแต่ละเซสชัน
มาสก์หน้า
ในเมธอดที่แสดงรายละเอียดสถานที่ คุณต้องระบุประเภทของข้อมูลสถานที่ที่จะแสดงกับคําขอแต่ละรายการ วิธีการนี้ช่วยให้แน่ใจว่าคุณขอ (และจ่ายเงิน) ข้อมูลที่คุณจะใช้จริงเท่านั้น
หากต้องการระบุประเภทข้อมูลที่ต้องการ ให้ส่งอาร์เรย์ของ Place.Field
ใน FetchPlaceRequest
ดังที่แสดงในตัวอย่างต่อไปนี้
// Include address, ID, and phone number.
List<Place.Field> placeFields = Arrays.asList(Place.Field.ADDRESS,
Place.Field.ID,
Place.Field.PHONE_NUMBER);
คุณสามารถใช้ช่องต่อไปนี้อย่างน้อย 1 ช่อง
Place.Field.ADDRESS
Place.Field.ID
Place.Field.LAT_LNG
Place.Field.NAME
Place.Field.OPENING_HOURS
Place.Field.PHONE_NUMBER
Place.Field.PHOTO_METADATAS
Place.Field.PLUS_CODE
Place.Field.PRICE_LEVEL
Place.Field.RATING
Place.Field.TYPES
Place.Field.USER_RATINGS_TOTAL
Place.Field.VIEWPORT
Place.Field.WEBSITE_URI
อ่านเพิ่มเติมเกี่ยวกับ SKU ของข้อมูล Places
การอัปเดตเครื่องมือเลือกสถานที่และการเติมข้อความอัตโนมัติ
ส่วนนี้จะอธิบายการเปลี่ยนแปลงวิดเจ็ตสถานที่ (เครื่องมือเลือกสถานที่และการเติมข้อความอัตโนมัติ)
การเติมข้อความอัตโนมัติแบบเป็นโปรแกรม
การเปลี่ยนแปลงในการเติมข้อความอัตโนมัติมีดังนี้
PlaceAutocomplete
เปลี่ยนชื่อเป็นAutocomplete
แล้วPlaceAutocomplete.getPlace
เปลี่ยนชื่อเป็นAutocomplete.getPlaceFromIntent
แล้วPlaceAutocomplete.getStatus
เปลี่ยนชื่อเป็นAutocomplete.getStatusFromIntent
แล้ว
PlaceAutocomplete.RESULT_ERROR
ถูกเปลี่ยนชื่อเป็นAutocompleteActivity.RESULT_ERROR
(การจัดการข้อผิดพลาดสําหรับส่วนย่อยของการเติมข้อความอัตโนมัติไม่มีการเปลี่ยนแปลง)
เครื่องมือเลือกสถานที่
เราเลิกใช้งานเครื่องมือเลือกสถานที่เมื่อวันที่ 29 มกราคม 2019 โหมดนี้ปิดไปเมื่อวันที่ 29 กรกฎาคม 2019 และจะใช้งานไม่ได้อีกต่อไป การใช้ต่อไปจะส่งผลให้ มีข้อความแสดงข้อผิดพลาด SDK ใหม่ไม่สนับสนุนเครื่องมือเลือกสถานที่
วิดเจ็ตที่เติมข้อความอัตโนมัติ
วิดเจ็ตการเติมข้อความอัตโนมัติได้รับการอัปเดตแล้ว
- นําคํานําหน้า
Place
ออกจากชั้นเรียนทั้งหมดแล้ว - เพิ่มการรองรับโทเค็นเซสชัน วิดเจ็ตจะจัดการโทเค็นให้คุณ โดยอัตโนมัติในพื้นหลัง
- เพิ่มการรองรับมาสก์ของช่องซึ่งจะช่วยให้คุณเลือกได้ว่าจะให้ระบบแสดงข้อมูลสถานที่ประเภทใดหลังจากผู้ใช้เลือก
ส่วนต่อไปนี้จะแสดงวิธีเพิ่มวิดเจ็ตการเติมข้อความอัตโนมัติลงในโครงการ
ฝัง AutocompleteFragment
หากต้องการเพิ่มส่วนย่อยของการเติมข้อความอัตโนมัติ ให้ทําตามขั้นตอนต่อไปนี้
เพิ่มส่วนย่อยในเค้าโครง XML ของกิจกรรม ดังที่แสดงในตัวอย่างต่อไปนี้
<fragment android:id="@+id/autocomplete_fragment" android:layout_width="match_parent" android:layout_height="wrap_content" android:name= "com.google.android.libraries.places.widget.AutocompleteSupportFragment" />
หากต้องการเพิ่มวิดเจ็ตการเติมข้อความอัตโนมัติลงในกิจกรรม ให้ทําตามขั้นตอนต่อไปนี้
- เริ่มต้น
Places
โดยส่งบริบทของแอปพลิเคชันและคีย์ API ของคุณ - เริ่มต้น
AutocompleteSupportFragment
- โทรหา
setPlaceFields()
เพื่อระบุประเภทของข้อมูลสถานที่ที่คุณต้องการได้รับ - เพิ่ม
PlaceSelectionListener
เพื่อดําเนินการกับผลลัพธ์และจัดการข้อผิดพลาดที่อาจเกิดขึ้น
ตัวอย่างต่อไปนี้แสดงให้เห็นการเพิ่มวิดเจ็ตอัตโนมัติลงในกิจกรรม
/** * Initialize Places. For simplicity, the API key is hard-coded. In a production * environment we recommend using a secure mechanism to manage API keys. */ if (!Places.isInitialized()) { Places.initialize(getApplicationContext(), "YOUR_API_KEY"); } // Initialize the AutocompleteSupportFragment. AutocompleteSupportFragment autocompleteFragment = (AutocompleteSupportFragment) getSupportFragmentManager().findFragmentById(R.id.autocomplete_fragment); autocompleteFragment.setPlaceFields(Arrays.asList(Place.Field.ID, Place.Field.NAME)); autocompleteFragment.setOnPlaceSelectedListener(new PlaceSelectionListener() { @Override public void onPlaceSelected(Place place) { // TODO: Get info about the selected place. Log.i(TAG, "Place: " + place.getName() + ", " + place.getId()); } @Override public void onError(Status status) { // TODO: Handle the error. Log.i(TAG, "An error occurred: " + status); } });
- เริ่มต้น
ใช้ Intent เพื่อเปิดกิจกรรมเติมข้อความอัตโนมัติ
- เริ่มต้น
Places
, ส่งบริบทของแอปและคีย์ API - ใช้
Autocomplete.IntentBuilder
เพื่อสร้าง Intent ผ่านโหมดPlaceAutocomplete
ที่ต้องการ (เต็มหน้าจอหรือซ้อนทับ) Intent ต้องเรียกใช้startActivityForResult
ซึ่งจะส่งผ่านรหัสคําขอที่ระบุความตั้งใจของคุณ - ลบล้างการเรียกกลับ
onActivityResult
เพื่อรับสถานที่ที่เลือก
ตัวอย่างต่อไปนี้แสดงวิธีใช้ Intent เพื่อเปิดใช้การเติมข้อมูลอัตโนมัติ จากนั้นจัดการผลลัพธ์
/**
* Initialize Places. For simplicity, the API key is hard-coded. In a production
* environment we recommend using a secure mechanism to manage API keys.
*/
if (!Places.isInitialized()) {
Places.initialize(getApplicationContext(), "YOUR_API_KEY");
}
...
// Set the fields to specify which types of place data to return.
List<Place.Field> fields = Arrays.asList(Place.Field.ID, Place.Field.NAME);
// Start the autocomplete intent.
Intent intent = new Autocomplete.IntentBuilder(
AutocompleteActivityMode.FULLSCREEN, fields)
.build(this);
startActivityForResult(intent, AUTOCOMPLETE_REQUEST_CODE);
...
/**
* Override the activity's onActivityResult(), check the request code, and
* do something with the returned place data (in this example its place name and place ID).
*/
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == AUTOCOMPLETE_REQUEST_CODE) {
if (resultCode == RESULT_OK) {
Place place = Autocomplete.getPlaceFromIntent(data);
Log.i(TAG, "Place: " + place.getName() + ", " + place.getId());
} else if (resultCode == AutocompleteActivity.RESULT_ERROR) {
// TODO: Handle the error.
Status status = Autocomplete.getStatusFromIntent(data);
Log.i(TAG, status.getStatusMessage());
} else if (resultCode == RESULT_CANCELED) {
// The user canceled the operation.
}
}
}
เครื่องมือเลือกสถานที่ไม่มีให้บริการแล้ว
เราเลิกใช้งานเครื่องมือเลือกสถานที่เมื่อวันที่ 29 มกราคม 2019 โหมดนี้ปิดไปเมื่อวันที่ 29 กรกฎาคม 2019 และจะใช้งานไม่ได้อีกต่อไป การใช้ต่อไปจะส่งผลให้ มีข้อความแสดงข้อผิดพลาด SDK ใหม่ไม่สนับสนุนเครื่องมือเลือกสถานที่