نسخه ۱۱.۲.۰ کیت توسعه نرمافزار (SDK) سرویسهای گوگل پلی شامل یک روش جدید برای دسترسی به کیت توسعه نرمافزار Places برای اندروید است. استفاده از کلاینت GoogleApi نسبت به نسخه قبلی خود ( GoogleApiClient ) آسانتر است، زیرا به طور خودکار اتصالات به سرویسهای گوگل پلی را مدیریت میکند. این امر باعث کاهش میزان کدهای تکراری در برنامه شما میشود و میتواند به رفع بسیاری از مشکلات رایج کمک کند. API جدید تعدادی پیشرفت ارائه میدهد:
- فرآیند اتصال به صورت خودکار مدیریت میشود، بنابراین API جدید برای پیادهسازی به کار کمتری نیاز دارد.
- فراخوانیهای API اکنون بهطور خودکار منتظر برقراری اتصال سرویس میمانند و دیگر نیازی به انتظار برای
onConnectedقبل از ارسال درخواست نیست. - API وظایف، نوشتن عملیات ناهمزمان را آسانتر میکند.
- این کد مستقل است و میتواند به یک کلاس کاربردی مشترک یا مشابه آن منتقل شود.
بهروزرسانی برنامه شما برای استفاده از کلاینت GoogleApi نیاز به تغییراتی در پیادهسازی Places SDK برای اندروید دارد. این راهنما تغییرات Places SDK برای اندروید را شرح میدهد و مراحلی را که هنگام بهروزرسانی برنامه خود برای استفاده از کلاینت جدید باید انجام دهید، توصیه میکند.
نمای کلی
زمینههای اصلی تغییر به شرح زیر است:
- دو نقطه ورود جدید وجود دارد:
GeoDataClientوPlaceDetectionClient. به جای ایجاد یک نمونهGoogleApiClientبرای پوشش همه APIها، برنامه شما اکنون باید همGeoDataClientوPlaceDetectionClientنمونهسازی کند. - از آنجایی که دیگر نیازی به فراخوانیهای اتصال (connection callbacks) نیست، میتوانید با خیال راحت برنامه خود را برای حذف آنها بازسازی (refactor) کنید.
- متدهای جدید Places API اکنون ناهمزمان هستند و به جای
PendingResultیکTaskبرمیگردانند.
بارگذاری API مکانها
برای بارگذاری API مربوط به Places، نقاط ورودی را تعریف کنید، سپس کلاینتها را در متد 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های گوگل بیشتر بدانید.