مهاجرت به GoogleApi Client

نسخه 11.2.0 SDK خدمات Google Play شامل راه جدیدی برای دسترسی به Places SDK برای Android است. استفاده از سرویس گیرنده GoogleApi نسبت به نسخه قبلی خود ( GoogleApiClient ) آسان تر است، زیرا به طور خودکار اتصالات به خدمات Google Play را مدیریت می کند. این مقدار کد دیگ بخار را در برنامه شما کاهش می دهد و می تواند به حذف بسیاری از مشکلات رایج کمک کند. API جدید تعدادی بهبود را ارائه می دهد:

  • فرآیند اتصال به صورت خودکار مدیریت می شود، بنابراین API جدید کار کمتری برای پیاده سازی دارد.
  • تماس‌های API اکنون به‌طور خودکار منتظر می‌مانند تا اتصال سرویس برقرار شود، و نیازی به منتظر ماندن برای onConnected قبل از درخواست‌ها را از بین می‌برد.
  • Tasks API نوشتن عملیات ناهمزمان را آسان‌تر می‌کند.
  • کد مستقل است و به راحتی می توان آن را به یک کلاس کاربردی مشترک یا مشابه منتقل کرد.

به‌روزرسانی برنامه برای استفاده از سرویس گیرنده GoogleApi به تغییراتی در Places SDK برای اجرای Android نیاز دارد. این راهنما تغییرات ایجاد شده در Places SDK برای Android را توضیح می‌دهد و مراحلی را توصیه می‌کند که هنگام به‌روزرسانی برنامه خود برای استفاده از کلاینت جدید، باید انجام دهید.

بررسی اجمالی

زمینه های اصلی تغییر به شرح زیر است:

  • دو نقطه ورودی جدید وجود دارد: GeoDataClient و PlaceDetectionClient . به‌جای ایجاد یک نمونه GoogleApiClient برای پوشش همه APIها، اکنون برنامه شما باید GeoDataClient و PlaceDetectionClient را نمونه‌سازی کند.
  • از آنجایی که دیگر نیازی به تماس‌های ارتباطی نیست، می‌توانید با خیال راحت برنامه خود را تغییر دهید تا آنها را حذف کنید.
  • متدهای جدید Places API اکنون ناهمزمان هستند و به جای PendingResult ، یک Task برمی‌گردانند.

API Places را بارگیری کنید

برای بارگذاری 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 اکنون ناهمزمان هستند و به جای PendingResult ، یک Task برمی‌گردانند. ساختارهای داده تغییر نکرده اند، بنابراین کد موجود شما برای مدیریت نتایج نباید نیاز به به روز رسانی داشته باشد. نمونه‌های کد زیر نسخه‌های جدید و قدیمی 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();
  }
});

بیشتر بدانید

درباره دسترسی به APIهای Google بیشتر بیاموزید.