0

Googleドライブのアプリフォルダに書き込むSyncAdapter(コードはUIスレッドでは実行されません)があります。これは、Google Sign-InなしのGoogleApiClientでうまくいきましたが、Google Sign-InでGoogleApiClientに移動しようとしています。GOOGLE_SIGN_IN_APIでGoogleApiClient.blockingConnect()が動作しない

のない作業コードGoogleログイン中:

mGoogleApiClient = new GoogleApiClient.Builder(context) 
      .setAccountName(accountName) 
      .addApi(Drive.API) 
      .addScope(Drive.SCOPE_APPFOLDER) 
      .addConnectionCallbacks(this) 
      .addOnConnectionFailedListener(this) 
      .build(); 
    mGoogleApiClient.blockingConnect(); 

を今、私はGoogleが、サインでは、それはもはや作品の使用に移動していること。

GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) 
      .requestScopes(new Scope(Scopes.DRIVE_APPFOLDER)) 
      .build(); 
    mGoogleApiClient = new GoogleApiClient.Builder(mApplication) 
      .addApi(Drive.API) 
      .addApi(Auth.GOOGLE_SIGN_IN_API, gso) 
      .addConnectionCallbacks(this) 
      .addOnConnectionFailedListener(this) 
      .build(); 
    mGoogleApiClient.blockingConnect(); 

私のプログラムはblockingConnect()への呼び出しに、次のエラーで倒れる:

java.lang.IllegalStateException: Cannot use SIGN_IN_MODE_REQUIRED with GOOGLE_SIGN_IN_API. Use connect(SIGN_IN_MODE_OPTIONAL) instead. 

をGoogleで blockingConnect()を実行するための方法があり、次のコードは、私が使用しようとしていますものですサインインAPI?

SyncAdapterが上記のコードを試行する前に、UIスレッドで最初のサインインを実行します。

+0

私は追加するのを忘れ...私はプレイサービスに9.4を使用しています。 0 –

答えて

0

これは、私はAPIは私SyncAdapterから仕事を得ることができる唯一の方法である - 新しいAPIはblockingConnect()で動作することを拒否:

GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) 
      .requestScopes(new Scope(Scopes.DRIVE_APPFOLDER)) 
      .build(); 
    mGoogleApiClient = new GoogleApiClient.Builder(mApplication) 
      .addApi(Drive.API) 
      .addApi(Auth.GOOGLE_SIGN_IN_API, gso) 
      .build(); 
    long start = System.currentTimeMillis(); 
    mGoogleApiClient.connect(GoogleApiClient.SIGN_IN_MODE_OPTIONAL); 
    while (mGoogleApiClient.isConnecting() && System.currentTimeMillis() - start < 5000) { 
     try { 
      Thread.sleep(250, 0); 
     } catch (InterruptedException e) { 
     } 
    } 
    if (mGoogleApiClient.isConnected()) { 
     try { 
      // Do stuff with Google Drive. 
     } finally { 
      mGoogleApiClient.disconnect(); 
     } 
    } 
関連する問題