GoogleApiClient onConnectionSuspended ,我应该再次调用 mGoogleApiClient.connect() 吗?

Posted

技术标签:

【中文标题】GoogleApiClient onConnectionSuspended ,我应该再次调用 mGoogleApiClient.connect() 吗?【英文标题】:GoogleApiClient onConnectionSuspended , should i call mGoogleApiClient.connect() again? 【发布时间】:2014-11-21 06:19:23 【问题描述】:

我在服务中使用 GoogleApiClient 来请求融合位置更新。每件事都正常工作,但有时连接被暂停并调用 onConnectionSuspended。

@Override
public void onCreate() 
    ...
    mGoogleApiClient = new GoogleApiClient.Builder(this) // this is a Context
    .addApi(LocationServices.API)
    .addConnectionCallbacks(this)  // this is a [GoogleApiClient.ConnectionCallbacks][1]
    .addOnConnectionFailedListener(this) //
    .build();

    mGoogleApiClient.connect();

    ...


@Override
public void onConnectionSuspended(int arg0) 

    // what should i do here ? should i call mGoogleApiClient.connect() again ? ? 


在上面的链接(ConnectionCallback 文档)中它说:

应用程序应禁用需要该服务的 UI 组件,并等待调用 onConnected(Bundle) 以重新启用它们。

但是这个对 onConnected 的调用将如何发生呢?我应该再次调用 mGoogleApiClient.connect() 吗?还是 mGoogleApiClient 即使在连接暂停后仍会继续尝试连接?

【问题讨论】:

【参考方案1】:

GoogleApiClient 将自动尝试重新连接。您无需再次拨打connect()

【讨论】:

您好 Hounshell,感谢您的回答,但您如何确定呢?有没有医生这么说的? 我是 GoogleApiClient 的原作者。我将尝试为下一个版本添加一个文档说明,以澄清这一点。 嗨@Hounshell,然后请从onConnectionSuspended 中删除connect() 调用quickstart apps,谢谢。 有趣的是,我今天刚刚在github.com/googlesamples/android-play-location/pull/3提交了一个Pull Request 虽然GoogleApiClient 尝试重新连接,但对我来说它从未成功。我必须使用Handler 并延迟手动调用以通过1000ms 重新连接才能看到onConnected() 成功记录连接。【参考方案2】:

The onConnected() doc 说:

调用connect()后,连接请求成功完成后,会异步调用该方法。

这意味着您必须调用 connect() 否则不会调用 onConnected()

【讨论】:

创建GoogleApiClient后确实需要调用connect。但是根据@hounshell 的回答,我们不必再次调用connect,因为它会自动调用。

以上是关于GoogleApiClient onConnectionSuspended ,我应该再次调用 mGoogleApiClient.connect() 吗?的主要内容,如果未能解决你的问题,请参考以下文章

实施 GoogleApiClient 时遇到问题

使用 onConnected() 显示最后一个已知位置

为啥连接到 mediaBrowser 时没有调用 connectionCallback.onConnected()?

在 connect() 之后未调用 MediaBrowserCompat.ConnectionCallback.onConnected()

为啥使用 GoogleAPIClient 请求位置更新?

chrome 扩展中不存在 chrome.runtime.onConnect