Переход на клиент GoogleApi

Выпуск 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 .