نسخه 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 بیشتر بیاموزید.