גרסה 11.2.0 של ה-SDK של שירותי Google Play כוללת דרך חדשה לגשת ל-Place SDK ל-Android. קל יותר להשתמש בלקוח GoogleApi
בהשוואה לקודמו (GoogleApiClient
), כי הוא מנהל באופן אוטומטי את החיבורים ל-Google Play Services. כך תוכלו להפחית את כמות הקוד הסטנדרטי באפליקציה ולהימנע משגיאות נפוצות רבות. ה-API החדש כולל מספר שיפורים:
- תהליך החיבור מנוהל באופן אוטומטי, כך שההטמעה של ה-API החדש כרוכה בפחות עבודה.
- קריאות ל-API ממתינות עכשיו באופן אוטומטי ליצירת החיבור לשירות, וכך אין צורך להמתין ל-
onConnected
לפני שליחת בקשות. - קל יותר לכתוב פעולות אסינכרוניות באמצעות Tasks API.
- הקוד הוא עצמאי ואפשר להעביר אותו בקלות למחלקה משותפת או למחלקה דומה.
כדי לעדכן את האפליקציה שלך לשימוש בלקוח GoogleApi
, צריך לבצע שינויים מסוימים בהטמעה של Places SDK ל-Android. במדריך הזה מתוארים השינויים ב-Place SDK עבור Android, ומפורטות פעולות שכדאי לבצע כשמעדכנים את האפליקציה כך שישתמשו בלקוח החדש.
סקירה כללית
אלה התחומים העיקריים שבהם יחול השינוי:
- יש שתי נקודות כניסה חדשות:
GeoDataClient
ו-PlaceDetectionClient
. במקום ליצור מופע אחד שלGoogleApiClient
שיכסה את כל ממשקי ה-API, האפליקציה צריכה עכשיו ליצור גם אתGeoDataClient
וגם אתPlaceDetectionClient
. - מאחר שכבר אין צורך בקריאות חוזרות (callback) לחיבור, תוכלו לסדר מחדש את האפליקציה באופן בטוח כדי להסיר אותן.
- השיטות החדשות של 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 APIs.