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