SDK บริการ Google Play เวอร์ชัน 11.2.0 มีวิธีใหม่ในการเข้าถึง Places SDK สำหรับ Android ไคลเอ็นต์ GoogleApi ใช้งานง่ายกว่า
ไคลเอ็นต์รุ่นก่อนหน้า (GoogleApiClient) เนื่องจากจัดการ
การเชื่อมต่อกับบริการ Google Play โดยอัตโนมัติ ซึ่งจะช่วยลดปริมาณโค้ดที่ต้องเขียนซ้ำๆ ในแอป และช่วยหลีกเลี่ยงข้อผิดพลาดที่พบบ่อยได้ API ใหม่มีฟีเจอร์ที่ได้รับการปรับปรุงหลายอย่าง ดังนี้
- ระบบจะจัดการกระบวนการเชื่อมต่อโดยอัตโนมัติ ดังนั้น API ใหม่จึงใช้เวลาในการติดตั้งใช้งานน้อยกว่า
- ตอนนี้การเรียก API จะรอให้มีการสร้างการเชื่อมต่อบริการโดยอัตโนมัติ จึงไม่จำเป็นต้องรอ
onConnectedก่อนที่จะทำการขอ - Tasks API ช่วยให้การเขียนการดำเนินการแบบไม่พร้อมกันง่ายขึ้น
- โค้ดมีฟังก์ชันการทำงานในตัวและสามารถย้ายไปยังคลาสยูทิลิตีที่แชร์หรือคลาสที่คล้ายกันได้
การอัปเดตแอปให้ใช้ไคลเอ็นต์ GoogleApi ต้องมีการเปลี่ยนแปลงการติดตั้งใช้งาน Places SDK สำหรับ Android คู่มือนี้จะอธิบายการเปลี่ยนแปลงใน Places SDK สำหรับ Android และแนะนำขั้นตอนที่ควรทำเมื่ออัปเดตแอปให้ใช้ไคลเอ็นต์ใหม่
ภาพรวม
ส่วนหลักๆ ที่มีการเปลี่ยนแปลงมีดังนี้
- มีจุดเริ่มต้นใหม่ 2 จุด ได้แก่
GeoDataClientและPlaceDetectionClientตอนนี้แอปต้องสร้างอินสแตนซ์ของGeoDataClientและPlaceDetectionClientทั้ง 2 รายการแทนการสร้างอินสแตนซ์GoogleApiClientรายการเดียวเพื่อครอบคลุม API ทั้งหมด - เนื่องจากไม่จำเป็นต้องใช้การเรียกกลับการเชื่อมต่ออีกต่อไป คุณจึงปรับโครงสร้างแอปเพื่อนำการเรียกกลับออกได้อย่างปลอดภัย
- ตอนนี้เมธอด Places API ใหม่เป็นแบบไม่พร้อมกันและแสดงผล
TaskแทนPendingResult
โหลด Places API
หากต้องการโหลด Places API ให้ประกาศจุดเริ่มต้น แล้วสร้างอินสแตนซ์ของไคลเอ็นต์ในเมธอด onCreate() ของ Fragment หรือ Activity ดังที่แสดงในตัวอย่างต่อไปนี้
// The entry points to the Places API.
private GeoDataClient mGeoDataClient;
private PlaceDetectionClient mPlaceDetectionClient;
...
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Construct a GeoDataClient.
mGeoDataClient = Places.getGeoDataClient(this, null);
// Construct a PlaceDetectionClient.
mPlaceDetectionClient = Places.getPlaceDetectionClient(this, null);
การเปรียบเทียบ
ตอนนี้เมธอด Places API ใหม่เป็นแบบไม่พร้อมกันและแสดงผล Task แทน PendingResult โครงสร้างข้อมูลไม่เปลี่ยนแปลง ดังนั้นโค้ดที่มีอยู่สำหรับการจัดการผลลัพธ์จึงไม่จำเป็นต้องอัปเดต
ตัวอย่างโค้ดต่อไปนี้จะเปรียบเทียบเวอร์ชันใหม่กับเวอร์ชันก่อนหน้าของ
GetCurrentPlace()
วิธีใหม่
Task<PlaceLikelihoodBufferResponse> placeResult = mPlaceDetectionClient.getCurrentPlace(null); placeResult.addOnCompleteListener(new OnCompleteListener<PlaceLikelihoodBufferResponse>() { @Override public void onComplete(@NonNull Task<PlaceLikelihoodBufferResponse> task) { PlaceLikelihoodBufferResponse likelyPlaces = task.getResult(); for (PlaceLikelihood placeLikelihood : likelyPlaces) { Log.i(TAG, String.format("Place '%s' has likelihood: %g", placeLikelihood.getPlace().getName(), placeLikelihood.getLikelihood())); } likelyPlaces.release(); } });
วิธีเดิม
PendingResult<PlaceLikelihoodBuffer> result = Places.PlaceDetectionApi .getCurrentPlace(mGoogleApiClient, null); result.setResultCallback(new ResultCallback<PlaceLikelihoodBuffer>() { @Override public void onResult(PlaceLikelihoodBuffer likelyPlaces) { for (PlaceLikelihood placeLikelihood : likelyPlaces) { Log.i(TAG, String.format("Place '%s' has likelihood: %g", placeLikelihood.getPlace().getName(), placeLikelihood.getLikelihood())); } likelyPlaces.release(); } });
ดูข้อมูลเพิ่มเติม
ดูข้อมูลเพิ่มเติมเกี่ยวกับการเข้าถึง Google API