Ich integriere Google Drive API in meine Android App, um eine JSON-Datei im Ordner App Storage zu speichern.Google Drive API Android-Kontoauswahl gibt immer RESULT_CANCELED für einige Konten zurück
Dazu habe ich die Google Drive API in ein Fragment in meiner MainActivity implementiert.
Wenn ich diesen Code ausführe, trifft er wie erwartet die onConnectionFailed-Methode mit dem SIGN_IN_REQUIRED-Code. Ich führe startResolutionForResult aus und die Kontoauswahl erscheint.
@Override
public void onConnectionFailed(ConnectionResult connectionResult) {
Log.i(TAG, "GoogleApiClient connection failed: " + connectionResult.toString());
if (connectionResult.hasResolution()) {
if(!mConnectionResolutionInProgress)
{
try {
mConnectionResolutionInProgress = true;
connectionResult.startResolutionForResult(getActivity(), REQUEST_CODE_RESOLUTION);
} catch (IntentSender.SendIntentException e) {
// Unable to resolve, message user appropriately
showMessage("There was an issue connecting to Google Drive services.");
}
}
else
{
mConnectionResolutionInProgress = false;
showMessage("Canceling export/import action");
}
}
else
{
mConnectionResolutionInProgress = false;
GooglePlayServicesUtil.getErrorDialog(connectionResult.getErrorCode(), getActivity(), 0).show();
}
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if(requestCode == REQUEST_CODE_RESOLUTION)
{
mConnectionResolutionInProgress = false;
if(resultCode == Activity.RESULT_OK)
{
if(!mGoogleApiClient.isConnected() && !mGoogleApiClient.isConnecting())
{
ConnectToGoogleDrive();
}
}
}
}
private void ConnectToGoogleDrive()
{
if(mGoogleApiClient == null)
{
mGoogleApiClient = new GoogleApiClient.Builder(getActivity())
.addApi(Drive.API)
.addScope(Drive.SCOPE_FILE)
.addScope(Drive.SCOPE_APPFOLDER)
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.build();
}
mGoogleApiClient.connect();
}
Das Merkwürdige ist, mit meinem persönlichen Konto (und meinem Konto bei der Arbeit) es funktioniert gut. Ich klicke auf mein Konto, dann verschwindet das Dialogfeld und es wird durch den Berechtigungsdialog ersetzt. Wenn ich das akzeptiere, dann läuft die Operation perfekt weiter. Das onActivityResult gibt resultCode RESULT_OK zurück.
Wenn ich das Konto eines anderen benutze, verschwindet die Kontoauswahl und ich treffe einen meiner Fehlerfälle. Wenn ich debugge, sehe ich, dass der ResultCode tatsächlich RESULT_CANCELED ist.
Ich sehe nicht, was der Unterschied ist. Es sieht so aus als ob mein Code ziemlich Standard ist.
Irgendwelche Ideen?
Verwenden Sie ein Google-Konto (d. H. Google Mail oder Google Apps Domain)? Wenn Sie die Google Apps-Domain verwenden, können Sie überprüfen, ob Google Drive für diesen Nutzer aktiviert ist? – Shailendra
Durch Verifizierung meinen Sie, dass Google Drive bereits verwendet wird? Das stimmt in beiden Fällen, die ich getestet habe, die fehlgeschlagen sind. –