捕捉 GoogleApiClient.disconnect() 回调

Posted

技术标签:

【中文标题】捕捉 GoogleApiClient.disconnect() 回调【英文标题】:Catch GoogleApiClient.disconnect() callback 【发布时间】:2016-05-14 00:24:34 【问题描述】:

我想捕捉onDisconnected 回调,但onConnectionSuspendedonConnectionFailed 都没有被调用。

public class mAct extends Activity implements
GoogleApiClient.ConnectionCallbacks,
GoogleApiClient.OnConnectionFailedListener 

//i'm using this:

protected void createClient() 
        if (gso == null) 
            gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
            .requestScopes(Drive.SCOPE_FILE)
            .requestScopes(Drive.SCOPE_APPFOLDER)// required for App Folder sample
            .requestEmail()
            .requestIdToken("MYKEY.apps.googleusercontent.com")
            .build();
        
        if (mGoogleApiClient == null) 

            mGoogleApiClient = new GoogleApiClient.Builder(this)
                    .addApi(Plus.API)
                    .addApi(Drive.API)
                    .addApi(Auth.GOOGLE_SIGN_IN_API, gso)
                    .addConnectionCallbacks(this)
                    .addOnConnectionFailedListener(this)
                    .build();
        
    
//this function calls `onConnected`
protected void connect() 
     if (mGoogleApiClient != null) 
         if (!mGoogleApiClient.isConnected() && !mGoogleApiClient.isConnecting()) 
             mGoogleApiClient.connect(GoogleApiClient.SIGN_IN_MODE_OPTIONAL);
         
     
    

//but this is not
protected void disconnect() 
        if (mGoogleApiClient != null) 
                mGoogleApiClient.disconnect();
        
    
//to signout I use this

protected void signoutWorker() 
        if (mGoogleApiClient != null && mGoogleApiClient.isConnected()) 
            Auth.GoogleSignInApi.signOut(mGoogleApiClient).setResultCallback(
                    new ResultCallback<Status>() 
                        @Override
                        public void onResult(Status status) 
                            //some setup and exit
                            disconnect();
                        
                    );

//this works
    @Override
    public void onConnected(Bundle connectionHint) 
        Log.i(TAG, "onConnected()");


//this not works
@Override
    public void onConnectionSuspended(int cause) 

//this not works too
Override
    public void onConnectionFailed(ConnectionResult result) 
    


据我了解,这个新 API 会阻止在调用 mGoogleApiClient.disconnect 时调用 onConnectionFailed。 我可以在disconnect() 函数中使用回调吗?这是正常的行为吗?

即:

 protected void disconnect() 
            if (mGoogleApiClient != null) 
                    mGoogleApiClient.disconnect();
                    myCallbackhere();//this callback
            
        

【问题讨论】:

【参考方案1】:

这两个方法都不是断开的回调方法。

@Override
public void onConnectionSuspended(int cause) 

onConnectionSuspended 在您的应用断开连接时被调用 Google Play 服务包(不一定是互联网)。

检查这个*** link

@Override
public void onConnectionFailed(ConnectionResult result) 

当方法失败时调用 onConnectionFailed,例如 DriveApi.newDriveContents 等。

支持检查错误或显示errorDialog,或解决后重试

检查这个quickstart link

很遗憾,断开连接没有回调

但 googleDrive 退出方法不在网络中。这样您就不用担心在不知情的情况下退出

在 disconnect() 之后调用你的方法

尝试disconnect(),在没有wifi、数据的情况下连接

这个googleTopic 可能会帮助你

【讨论】:

以上是关于捕捉 GoogleApiClient.disconnect() 回调的主要内容,如果未能解决你的问题,请参考以下文章

arcgis捕捉容差设置多少能完全重合

捕捉 SIGTERM 与捕捉 SIGINT

[高分悬赏]wireshark捕捉阿里旺旺数据包

AVFoundation学习笔记: 媒体捕捉读取及写入

arcgis开启捕捉工具还是没有办法使用,是怎么回事啊

Arcgis软件开了捕捉无效是怎么回事?全部勾选的情况下