【问题标题】:GoogleApiClient and GooglePlayServicesClient: Can you preserve a separation of concerns?GoogleApiClient 和 GooglePlayServicesClient:你能保持关注点分离吗?
【发布时间】:2014-03-29 16:27:08
【问题描述】:

我的情况:

  1. 首先,我在我的应用程序中实现了 Google Plus 身份验证。我关注了quick start instructions 并将quick start sample app code 添加到我的应用中。
  2. 然后我想获取用户的最后一个已知位置。 Fused Location Provider 似乎是最现代的获取方式,所以我查看了 LocationUpdates.zipkpbird's demo code

我的担心:

  • com.google.android.gms.common.api.GoogleApiClientcom.google.android.gms.common.GooglePlayServicesClient 命名空间引入了一些重叠,因为如果你想使用GoogleApiClientLocationClient,那么你的类(即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 触发了onConnectedonConnectionFailed 事件处理程序。


我的问题:

【问题讨论】:

标签: android google-play-services separation-of-concerns google-api-client location-client


【解决方案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);

【讨论】:

    猜你喜欢
    • 2015-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-01
    • 2014-02-09
    • 2013-03-28
    • 1970-01-01
    相关资源
    最近更新 更多