GoogleApi İstemcisine 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 hizmetleriyle olan bağlantıları otomatik olarak yönettiğinden önceki istemciye (GoogleApiClient) göre daha kolay kullanılabilir. Bu, uygulamanızdaki standart kod miktarını azaltır ve birçok yaygın sorunun ortadan kaldırılmasına yardımcı olabilir. Yeni API çeşitli iyileştirmeler sunuyor:

  • Bağlantı süreci otomatik olarak yönetildiğinden yeni API'nin uygulanması daha kısa sürer.
  • API çağrıları artık hizmet bağlantısının kurulmasını otomatik olarak bekleyerek istekte bulunmadan önce onConnected bekleme ihtiyacını ortadan kaldırır.
  • Tasks API, eşzamansız işlem oluşturmayı kolaylaştırır.
  • Bu kod bağımsızdır ve paylaşılan bir yardımcı program sınıfına veya benzeri bir yere kolayca taşınabilir.

Uygulamanızı GoogleApi istemcisini kullanacak şekilde güncellemek için Android için Yerler SDK'nızda bazı değişiklikler yapılması 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 izlemeniz gereken adımlar önerilmiştir.

Genel bakış

Temel değişiklik alanları şunlardır:

  • İki yeni giriş noktası var: GeoDataClient ve PlaceDetectionClient. Tüm API'leri kapsayacak bir GoogleApiClient örneği oluşturmak yerine, uygulamanızın artık hem GeoDataClient hem de PlaceDetectionClient örneğini oluşturması gerekir.
  • Bağlantı geri çağırmaları artık gerekli olmadığından, bunları kaldırmak için uygulamanızı güvenli bir şekilde yeniden düzenleyebilirsiniz.
  • 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 ve ardından aşağıdaki örnekte gösterildiği gibi parçanızın veya etkinliğinizin onCreate() yönteminde istemcileri somutlaştırın:

// 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ğinden, sonuçları işlemeye yönelik mevcut kodunuzun güncellenmesi gerekmez. Aşağıdaki kod örneklerinde GetCurrentPlace() ürününün yeni ve eski sürümleri karşılaştırılmaktadır:

Yeni yöntem

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 tarz

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.