2015-01-04 17 views
7

Ich habe folgende Absicht:Intent.ACTION_GET_CONTENT mit Google Drive

Intent intent = new Intent(Intent.ACTION_GET_CONTENT); 
intent.setType("text/*"); 
startActivityForResult(intent, DBOpenHelper.REQUEST_CODE_RESTORE); 

Die Absicht kann der Benutzer eine Textdatei aus einer Reihe von Optionen zu wählen. Es funktioniert gut mit lokalem Speicher und Dropbox zum Beispiel, und in beiden Fällen kann ich die Datei aus erhalten wie folgt:

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 

    if ((requestCode == DBOpenHelper.REQUEST_CODE_RESTORE) 
      && (resultCode == Activity.RESULT_OK)) { 
     restoreFile = new File(data.getData().getPath()); 
     restoreFileName = restoreFile.getName(); 
    } 
} 

Lokale Speicherung funktioniert und Dropbox wird eine lokale Kopie der Datei auf die SD-Karte kopieren und gib den richtigen Pfad zurück. Das Problem besteht darin, wenn der Benutzer Dateien von Google Drive auswählt. Wenn sie Google Drive verwenden, gibt data.getData(). GetPath() etwas wie "/ document/acc = 1; doc = 195" zurück, anstatt den Pfad zur lokal gespeicherten Datei zurückzugeben. Wie kann Google Drive die Datei herunterladen und den Pfad zurückgeben? Ich möchte dem Benutzer erlauben, aus jeder verfügbaren Dateispeicheroption auszuwählen.

Antwort

6

Google Drive hat die Datei möglicherweise lokal heruntergeladen oder nicht, wenn der Benutzer die Datei auswählt. Sie können jedoch in allen Fällen über getContentResolver().openInputStream(data.getData()) auf den Inhalt der Datei zugreifen - beachten Sie, dass openInputStream() auch lokale Dateien unterstützt und auch in anderen Fällen verwendet werden kann und sollte.

+0

Vielen Dank! Das ist viel einfacher! – goodnoodle