2

我的情况:

  1. 首先,我在我的应用中实现了 Google Plus 身份验证。我按照快速启动说明快速启动示例应用程序代码添加到我的应用程序中。
  2. 然后我想获取用户的最后一个已知位置。Fused Location Provider 似乎是获取它的最现代方式,所以我查看了LocationUpdates.zipkpbird 的演示代码

我的顾虑:

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


我的问题:

  • 我想保持关注点分离。有没有更好的方法来解决这个问题?
4

1 回答 1

5

您可以在活动类中创建单独的对象成员,而不是在活动类本身中实现这些接口。

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);
于 2014-04-16T02:39:00.563 回答