2017-05-07 1 views
0

Ich benutze Google Drive API für Android. Dies ist der Code, den ich gerade habe.openFileActivityBuilder Absicht. Wie man darauf wartet, dass es eine Verbindung herstellt und wie man die Datei daraus bekommt

public void downloadFromDrive(){ 

     mGoogleApiClient.connect(); 


     IntentSender intentSender = Drive.DriveApi.newOpenFileActivityBuilder().setMimeType(new String[]{"text/plain"}).build(mGoogleApiClient); 
    try{ 
     startIntentSenderForResult(intentSender,2,null,0,0,0); 
    } catch (IntentSender.SendIntentException e) { 
     e.printStackTrace(); 
     Log.w(TAG, "Unable to send intent", e); 

    } 

}

Derzeit gibt es zwei Probleme mit ihm. Da es kein Ergebnis gibt, ruft mGoogleClient keine Verbindung mit mGoogleApiClient.connect() auf. Irgendwelche Ideen, wie man wartet, bis es tatsächlich verbunden ist? Die Verwendung von isConnected() oder onConnect() versetzt mich nur in eine Endlosschleife. Ich verbinde den API-Client gerade erst mit einer anderen Methode (derjenige, der Sachen hochlädt)

Wie bekomme ich einen FileStream aus dem IntentSender heraus? Ich habe Code zum Hochladen auf Google Drive, und ich musste meinen OutputStreamWriter nie in einer beliebigen Methode angeben. Ich habe gerade einen Output-Stream erstellt, den Intentsender genannt, und die GUI hat die Datei problemlos hochgeladen.

+0

Verwenden Sie ['enableAutoManage (FragmentActivity, GoogleApiClient.OnConnectionFailedListener)]] (https://developers.google.com/android/reference/com/google/android/gms/common/api/GoogleApiClient.Builder#enableAutoManage (android.support.v4.app.FragmentActivity, com.google.android.gms.common.api.GoogleApiClient.OnConnectionFailedListener)) Dies ist der einfachste Weg, um die Verbindung zu verwalten, wie in der [Dokumentation] (https: // developers. google.com/android/reference/com/google/android/gms/common/api/GoogleApiClient). – Teyam

+0

Weitere Informationen finden Sie unter [Zugriff auf Google APIs] (https://developers.google.com/android/guides/api-client). – Teyam

+0

@Teyam ja, das scheint das Problem gelöst zu haben. – Nephilim

Antwort

0

Der erste Teil des Problems wurde von den lieben Menschen in den obigen Kommentaren gelöst. (enableAutoManage)

Das Abrufen eines Dateistroms aus dem IntentSender kann durch Bearbeiten der OnActivityResult-Methode erreicht werden.

public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    System.out.println("ONACTIVITY RESULT"); 
    System.out.println("REQUEST CODE" + requestCode); 
    // Result returned from launching the Intent from GoogleSignInApi.getSignInIntent(...); 
    if (requestCode == RC_SIGN_IN) { 
     GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data); 
     handleSignInResult(result); 
     System.out.println("GOOGLE SIGN IN"); 
    } 
    if(requestCode == 2){ 

      try{ 
       mDriveID = data.getParcelableExtra(OpenFileActivityBuilder.EXTRA_RESPONSE_DRIVE_ID); 
       System.out.println("ONACTIVITY DRIVE ID " + mDriveID); 

      } 
      catch (NullPointerException e) { 
      } 

    } 
} 

onActivityResults führt jedes Mal, wenn Sie mit einer Google Drive Absicht fertig sind (glaube ich, nicht sicher). Sie müssen also einen Fehler finden, wenn Sie einen IntentSender für etwas anderes starten. Das ist nicht die beste Antwort, aber es hat funktioniert.

Verwandte Themen