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