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