يتضمّن الإصدار 11.2.0 من حزمة تطوير البرامج (SDK) لخدمات Google Play طريقة جديدة للوصول إلى Places SDK لنظام التشغيل Android. يتميّز برنامج GoogleApi بسهولة الاستخدام مقارنةً بالبرنامج السابق (GoogleApiClient)، إذ يدير تلقائيًا عمليات الربط بخدمات Google Play. يقلّل ذلك من مقدار الرمز النموذجي في تطبيقك، ويمكن أن يساعد في تجنُّب العديد من المشاكل الشائعة. تقدّم واجهة برمجة التطبيقات الجديدة عددًا من التحسينات:
- تتم إدارة عملية الربط تلقائيًا، لذا تتطلّب واجهة برمجة التطبيقات الجديدة جهدًا أقل لتنفيذها.
- تنتظر طلبات البيانات من واجهة برمجة التطبيقات الآن تلقائيًا إلى أن يتم إنشاء اتصال الخدمة، ما يزيل الحاجة إلى انتظار
onConnectedقبل إرسال الطلبات. - تسهّل Tasks API إنشاء عمليات غير متزامنة.
- الرمز البرمجي مستقل بذاته، ويمكن نقله إلى فئة أدوات مساعدة مشتركة أو ما شابه ذلك.
يتطلّب تحديث تطبيقك لاستخدام عميل GoogleApi إجراء بعض التغييرات على عملية تنفيذ حزمة تطوير البرامج (SDK) الخاصة بخدمة "أماكن Google" لنظام التشغيل Android. يوضّح هذا الدليل التغييرات التي تم إجراؤها على Places SDK for Android، ويقدّم اقتراحات بشأن الخطوات التي يجب اتّخاذها عند تعديل تطبيقك لاستخدام العميل الجديد.
نظرة عامة
في ما يلي المجالات الرئيسية للتغيير:
- هناك نقطتا دخول جديدتان:
GeoDataClientوPlaceDetectionClient. بدلاً من إنشاء مثيلGoogleApiClientواحد لتغطية جميع واجهات برمجة التطبيقات، يجب أن ينشئ تطبيقك الآن مثيلاً لكل من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