GoogleApi istemcisine geçiş

Google Play Hizmetleri SDK'sının 11.2.0 sürümü, Android için Yerler SDK'sına erişmenin yeni bir yolunu içerir. GoogleApi istemcisi, Google Play Hizmetleri'ne bağlantıları otomatik olarak yönettiğinden önceki sürümüne (GoogleApiClient) kıyasla daha kolay kullanılır. Bu, uygulamanızdaki standart kod miktarını azaltır ve birçok yaygın hatadan kaçınmanıza yardımcı olabilir. Yeni API, çeşitli iyileştirmeler sunar:

  • Bağlantı süreci otomatik olarak yönetildiğinden yeni API'nin uygulanması daha az iş gerektirir.
  • API çağrıları artık hizmet bağlantısının kurulmasını otomatik olarak bekler. Böylece, istekte bulunmadan önce onConnected'nın beklenmesine gerek kalmaz.
  • Tasks API, asenkron işlemler oluşturmayı kolaylaştırır.
  • Kod bağımsızdır ve paylaşılan bir yardımcı sınıfına veya benzerine taşınabilir.

Uygulamanızı GoogleApi istemcisini kullanacak şekilde güncellemek için Android için Places SDK uygulamanızda bazı değişiklikler yapmanız gerekir. Bu kılavuzda, Android için Yerler SDK'sında yapılan değişiklikler açıklanmakta ve uygulamanızı yeni istemciyi kullanacak şekilde güncellerken yapmanız gereken adımlar önerilmektedir.

Genel Bakış

Değişikliğin yapıldığı başlıca alanlar şunlardır:

  • İki yeni giriş noktası vardır: GeoDataClient ve PlaceDetectionClient. Tüm API'leri kapsayacak tek bir GoogleApiClient örneği oluşturmak yerine, uygulamanızın artık hem GeoDataClient hem de PlaceDetectionClient öğelerini başlatması gerekiyor.
  • Bağlantı geri çağırmaları artık gerekli olmadığından uygulamanızı güvenle yeniden düzenleyerek bunları kaldırabilirsiniz.
  • Yeni Places API yöntemleri artık eşzamansızdır ve PendingResult yerine Task döndürür.

Places API'yi yükleme

Places API'yi yüklemek için giriş noktalarını bildirin, ardından istemcileri parçanızın veya etkinliğinizin onCreate() yönteminde aşağıdaki örnekte gösterildiği gibi oluşturun:

// 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);

Karşılaştırma

Yeni Places API yöntemleri artık eşzamansızdır ve PendingResult yerine Task döndürür. Veri yapıları değişmediği için sonuçları işlemek üzere kullandığınız mevcut kodunuzun güncellenmesi gerekmez. Aşağıdaki kod örneklerinde, GetCurrentPlace() öğesinin yeni ve önceki sürümleri karşılaştırılmaktadır:

Yeni yol

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();
    }
});

Eski yöntem

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();
  }
});

Daha fazla bilgi

Google API'lerine erişme hakkında daha fazla bilgi edinin.