好的,所以我目前正在我的应用程序中实现 Google Drive API 连接,因此我让用户通过他们的 Google Plus 帐户登录。我的问题是这GoogleApiClient.isConnected()
似乎并不总是准确的。问题是,如果我登录(使用此处定义的 Android Google Plus 文档中的过程,然后我尝试通过调用此方法撤销应用程序对用户 Google Play 帐户的访问权限:
/**
* Revokes the user access given to application and disconnects from their account
*/
public void onGoogleRevokeAndDisconnect()
{
if(mGoogleApiClient.isConnected()) {
//clear account
Plus.AccountApi.clearDefaultAccount(mGoogleApiClient);
//revoke and disconnect
Plus.AccountApi.revokeAccessAndDisconnect(mGoogleApiClient)
.setResultCallback(new ResultCallback<Status>() {
@Override
public void onResult(Status arg0) {
Toast.makeText(MainActivity.this, "Account disconnected succesfully!",Toast.LENGTH_LONG).show();
mGoogleApiClient.isConnected();
//mGoogleApiClient.disconnect();//TODO: Find out why this is necessary to make this not break
//reconnect
mGoogleApiClient.connect();
//Update button states in SettingsFragment
mSettingsFragment.updateGoogleButtonVisibility();//no longer signed in
}
});
}
else
Toast.makeText(this, "You must be signed in to revoke access!", Toast.LENGTH_SHORT).show();
}
然后当我检查GoogleApiClient.isConnected()
方法返回的值时true
。显然,这应该返回 false,因为该帐户已被撤销并断开连接。有趣的是,当我尝试在不重新登录的情况下退出时,我收到一个异常消息:
01-19 23:14:37.738: E/AndroidRuntime(17503):java.lang.IllegalStateException: Not connected. Call connect() and wait for onConnected() to be called.
clearDefaultAccount()
这是在注销过程中在此方法调用()中抛出的,默认帐户被清除(此处的文档,其中没有说明引发异常的任何内容)也许GoogleApiClient.isConnected()
并且此方法以不同的方式检查?
我也知道帐户权限确实被撤销了,因为当我关闭应用程序并重新打开它时,再次提示我授权我的帐户。当我正常退出时,没有撤销访问权限,一切正常。
可能的修复:
我确实找到了一个到目前为止似乎正在工作的修复 - 这mGoogleApiClient.disconnect();
是onResult()
使用revokeAccessAndDisconnect()
.