به GoogleApi Client مهاجرت کنید

نسخه ۱۱.۲.۰ کیت توسعه نرم‌افزار (SDK) سرویس‌های گوگل پلی شامل یک روش جدید برای دسترسی به کیت توسعه نرم‌افزار Places برای اندروید است. استفاده از کلاینت GoogleApi نسبت به نسخه قبلی خود ( GoogleApiClient ) آسان‌تر است، زیرا به طور خودکار اتصالات به سرویس‌های گوگل پلی را مدیریت می‌کند. این امر باعث کاهش میزان کدهای تکراری در برنامه شما می‌شود و می‌تواند به رفع بسیاری از مشکلات رایج کمک کند. API جدید تعدادی پیشرفت ارائه می‌دهد:

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

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

نمای کلی

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

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

بارگذاری API مکان‌ها

برای بارگذاری API مربوط به Places، نقاط ورودی را تعریف کنید، سپس کلاینت‌ها را در متد 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های گوگل بیشتر بدانید.