النقل إلى عميل GoogleApi

يتضمن الإصدار 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