次の手順に従って、アプリケーション (Google Drive Android API) でドライブにログインします: https://developers.google.com/drive/android/auth
debug.keystore を使用して SHA1 フィンガープリントを生成しました。デバイスでアプリケーションを実行すると、最初の接続は失敗しますが、hasResolution は true であり、アカウント選択ダイアログが表示されます。問題は、アカウントを選択する前に onActivityResult メソッドがすぐに呼び出されることです。もちろん、resultCode は問題ありません。
private GoogleApiClient mGoogleApiClient;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//some other code...
mGoogleApiClient = new GoogleApiClient.Builder(this)
.addApi(Drive.API)
.addScope(Drive.SCOPE_FILE)
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.build();
}
@Override
protected void onStart() {
super.onStart();
mGoogleApiClient.connect();
}
@Override
protected void onStop() {
if(mGoogleApiClient != null)
mGoogleApiClient.disconnect();
super.onStop();
}
@Override
public void onConnected(Bundle bundle) {
Log.d(TAG, "DRIVE: connected");
CONNECTED = true;
}
@Override
public void onConnectionSuspended(int i) {
Log.d(TAG, "DRIVE: disconnected");
CONNECTED = false;
}
@Override
public void onConnectionFailed(ConnectionResult connectionResult) {
Log.d(TAG, "DRIVE: connection failed");
CONNECTED = false;
if (connectionResult.hasResolution()) {
try {
connectionResult.startResolutionForResult(this, REQUEST_CODE_RESOLUTION);
} catch (IntentSender.SendIntentException e) {
//mGoogleApiClient.connect(); whit or whitout is the same...
}
} else {
GooglePlayServicesUtil.getErrorDialog(connectionResult.getErrorCode(), this, 0).show();
}
}
@Override
protected void onActivityResult(final int requestCode, final int resultCode, final Intent data){
switch (requestCode) {
case REQUEST_CODE_RESOLUTION:
if (resultCode == RESULT_OK) {
mGoogleApiClient.connect();
}
break;
case REQUEST_CODE_CREATOR:
if(resultCode != RESULT_OK)
newNotification("Upload Fallito", "...", android.R.drawable.ic_dialog_alert);
break;
}
}