Выпуск 11.2.0 SDK сервисов Google Play включает новый способ доступа к Places SDK для Android. Клиент GoogleApi
проще в использовании, чем его предшественник ( GoogleApiClient
), поскольку он автоматически управляет подключениями к сервисам Google Play. Это уменьшает объем шаблонного кода в вашем приложении и может помочь устранить многие распространенные ошибки. Новый API предлагает ряд улучшений:
- Процесс подключения управляется автоматически, поэтому внедрение нового API требует меньше усилий.
- Вызовы API теперь автоматически ожидают установления соединения со службой, устраняя необходимость ожидания
onConnected
перед выполнением запросов. - API задач упрощает создание асинхронных операций.
- Код является автономным и может быть перемещен в общий служебный класс или аналогичный.
Обновление вашего приложения для использования клиента GoogleApi
требует некоторых изменений в реализации Places SDK для Android. В этом руководстве описываются изменения в Places SDK для Android и рекомендуются шаги, которые следует предпринять при обновлении вашего приложения для использования нового клиента.
Обзор
Основные направления изменений следующие:
- Есть две новые точки входа:
GeoDataClient
иPlaceDetectionClient
. Вместо создания одного экземпляраGoogleApiClient
для охвата всех API, ваше приложение теперь должно создавать экземпляры какGeoDataClient
, так иPlaceDetectionClient
. - Поскольку обратные вызовы подключений больше не требуются, вы можете безопасно реорганизовать свое приложение, чтобы удалить их.
- Новые методы API Places теперь асинхронны и возвращают
Task
вместоPendingResult
.
Загрузите API Places
Чтобы загрузить 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);
Сравнение
Новые методы API Places теперь асинхронны и возвращают Task
вместо PendingResult
. Структуры данных не изменились, поэтому ваш существующий код для обработки результатов не нуждается в обновлении. В следующих примерах кода сравниваются новая и более ранняя версии 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 .