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:
GeoDataClientvePlaceDetectionClient. Tüm API'leri kapsayacak tek birGoogleApiClientörneği oluşturmak yerine, uygulamanızın artık hemGeoDataClienthem dePlaceDetectionClientöğ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
PendingResultyerineTaskdö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.