Переход на клиент 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 .
  • Поскольку обратные вызовы соединения больше не требуются, вы можете безопасно реорганизовать свое приложение и удалить их.
  • Новые методы Places API теперь асинхронны и возвращают Task , а не PendingResult .

Загрузите API-интерфейс Адресов

Чтобы загрузить 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 теперь асинхронны и возвращают 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 .