บริการ Google Play SDK รุ่น 11.2.0 มีวิธีใหม่ในการเข้าถึง Places SDK สำหรับ Android ไคลเอ็นต์ GoogleApi
นั้นใช้งานง่ายกว่ารุ่นก่อนหน้า (GoogleApiClient
) เนื่องจากจะจัดการการเชื่อมต่อกับบริการ Google Play โดยอัตโนมัติ วิธีนี้จะช่วยลดปริมาณโค้ดต้นแบบในแอป และช่วยลดข้อผิดพลาดทั่วไปต่างๆ ได้ API ใหม่มีการปรับปรุงหลายอย่าง ดังนี้
- กระบวนการเชื่อมต่อจะได้รับการจัดการโดยอัตโนมัติ ดังนั้น API ใหม่จึงไม่ต้องเสียเวลาดำเนินการ
- ตอนนี้การเรียก API จะรอให้มีการสร้างการเชื่อมต่อบริการโดยอัตโนมัติ ทำให้ไม่ต้องรอ
onConnected
ก่อนที่จะส่งคำขอ - Tasks API ช่วยให้การเขียนการดำเนินการแบบอะซิงโครนัสง่ายขึ้น
- โค้ดจะคงอยู่ในระบบและสามารถย้ายไปไว้ในคลาสยูทิลิตีที่ใช้ร่วมกันหรือคล้ายกันได้โดยง่าย
คุณต้องทำการเปลี่ยนแปลงบางอย่างกับการติดตั้งใช้งาน Places SDK สำหรับ Android หากต้องการอัปเดตแอปให้ใช้ไคลเอ็นต์ GoogleApi
คู่มือนี้อธิบาย
การเปลี่ยนแปลงของ Places SDK สำหรับ Android และแนะนำ
ขั้นตอนที่ต้องทำเมื่ออัปเดตแอปเพื่อใช้ไคลเอ็นต์ใหม่
ภาพรวม
การเปลี่ยนแปลงหลักๆ มีดังนี้
- จุดแรกเข้าใหม่ 2 จุด ได้แก่
GeoDataClient
และPlaceDetectionClient
แทนที่จะสร้างอินสแตนซ์GoogleApiClient
1 รายการเพื่อให้ครอบคลุม API ทั้งหมด ตอนนี้แอปของคุณต้องสร้างอินสแตนซ์ทั้งGeoDataClient
และPlaceDetectionClient
- เนื่องจากไม่จำเป็นต้องใช้โค้ดเรียกกลับการเชื่อมต่ออีกต่อไป คุณจึงเปลี่ยนโครงสร้างภายในแอปเพื่อนำออกได้
- ตอนนี้เมธอด Places API แบบใหม่เป็นแบบอะซิงโครนัส
และแสดงผล
Task
แทนPendingResult
โหลด Places API
หากต้องการโหลด Places API ให้ประกาศจุดแรกเข้า แล้วสร้างอินสแตนซ์ไคลเอ็นต์ในเมธอด onCreate() ของส่วนย่อยหรือกิจกรรม ดังที่แสดงในตัวอย่างต่อไปนี้
// 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