GoogleApiClient и GooglePlayServicesClient: можете ли вы сохранить разделение задач?

Моя ситуация:

  1. Во-первых, я реализовал аутентификацию Google Plus в своем приложении. Я следовал кратким инструкциям и добавил пример кода быстрого запуска в мое приложение.
  2. Затем я хотел получить последнее известное местоположение пользователя. Fused Location Provider оказался самым современным способом его получения, поэтому я посмотрел на LocationUpdates.zip и демонстрационный код kpbird .

Моя забота:

  • Пространства имен com.google.android.gms.common.api.GoogleApiClient и com.google.android.gms.common.GooglePlayServicesClient вносят некоторое перекрытие в силу того факта, что если вы хотите использовать GoogleApiClient и LocationClient, то ваш класс (то есть Activity) должен реализовать следующее:

    GoogleApiClient.ConnectionCallbacks,  
    GoogleApiClient.OnConnectionFailedListener,  
    GooglePlayServicesClient.ConnectionCallbacks,  
    GooglePlayServicesClient.OnConnectionFailedListener
    

И код из обоих пространств имен переопределит следующее:

@Override
public void onConnected(Bundle connectionHint) {
            /* pseudo-code
            if (GoogleApiClient) {
               // Implementation
            } else {                
               // Must be LocationClient
            }
            */
}

@Override
public void onConnectionFailed(ConnectionResult result) {
            /* pseudo-code
            if (GoogleApiClient) {
               // Implementation
            } else {                
               // Must be LocationClient
            }
            */
}

Таким образом, вам придется писать код, чтобы определить, были ли GoogleApiClient или LocationClient инициированы обработчики событий onConnected и onConnectionFailed.


Мой вопрос:


comment
Взгляните на stackoverflow.com/questions/31734567/ Это не полное решение вашей проблемы, но может дать вам некоторые идеи.   -  person JP Ventura    schedule 31.07.2015


Ответы (1)


Вместо того, чтобы реализовывать эти интерфейсы в самом классе активности, вы можете создавать отдельные элементы-объекты в своем классе активности.

public YourActivity extends Activity {
    ...
    private GoogleApiClient.ConnectionCallbacks apiClient1 = new GoogleApiClient.ConnectionCallbacks() {
        @Override
        public void onConnectionSuspended(int cause) {
        }

        @Override
        public void onConnected(Bundle connectionHint) {
        }
    };

    private GoogleApiClient.OnConnectionFailedListener apiClient2 = new GoogleApiClient.OnConnectionFailedListener() {
        @Override
        public void onConnectionFailed(ConnectionResult result) {
        }
    };

    private GooglePlayServicesClient.ConnectionCallbacks servicesClient1 = new GooglePlayServicesClient.ConnectionCallbacks() {
        @Override
        public void onDisconnected() {
        }

        @Override
        public void onConnected(Bundle connectionHint) {
        }
    };

    private GooglePlayServicesClient.OnConnectionFailedListener servicesClient2 = new GooglePlayServicesClient.OnConnectionFailedListener() {
        @Override
        public void onConnectionFailed(ConnectionResult result) {
        }
    };
    ...
}

Затем создайте свой GoogleApiClient с помощью

GoogleApiClient.Builder builder = new GoogleApiClient.Builder(yourContext, apiClient1, apiClient2);
builder.addApi(...).addScope(...);
GoogleApiClient apiClient = builder.build();

создайте свой LocationClient с помощью

LocationClient locClient = new LocationClient(yourContent, servicesClient1, servicesClient2);
person 正宗白布鞋    schedule 16.04.2014