2013-07-27 11 views
15

Ich habe eine App auf Android, die einige Dateifreigabe mit Cloud-Speicher wie Dropbox tut. Um mit der Freigabe zu beginnen, werfe ich android.intent.action.SEND. In der Liste, die angezeigt wird, sehe ich die Google Drive-App (zuvor installiert), also versuche ich, die Datei an sie zu senden - es funktioniert, die Datei erscheint in der Laufwerksliste.Google Drive GET_CONTENT Absicht lesen Datei

Dann möchte ich auf einem anderen Gerät diese Datei lesen. Ich werfe die android.intent.action.GET_CONTENT Absicht, wählen Sie Drive und dann nicht wissen, wie Sie zur Datei gelangen. Ich erhalte einen Uri in etwa wie folgt:

content://com.google.android.apps.docs.files/exposed_content/6jn9cnzdJbDywpza%2BlW3aA%3D%3D%0A%3BRV%2FaV94o%2FCcW4HGBYArtwOdHqt%2BrsYO4WmHcs6QWSVwp%2FXogkRAgit7prTnfp00a%0A 

die ich nicht weiß, wie in physischen Dateipfad zu transformieren. Wie kann ich den Dateiinhalt davon bekommen?

Ich spielte um den Content-Provider und kann den Dateinamen abrufen, aber nicht den vollständigen Pfad oder irgendetwas anderes.

Für die Dropbox bekomme ich die file:// Stil URI, gerade und einfach, funktioniert gut.

Antwort

5

Es Sie uri von Content-Provider sendet, die Sie es mit ContentResolver, wie zum Beispiel verwenden können:

getContentResolver().query(Uri contentUri, String[] projection, String selection, String[] selectionArgs, String sortOrder); 

Edit: Für echte Pfadnamen immer die Lösung bei Temperaturen unter

Android: Getting a file URI from a content URI?

bereitgestellt
+0

ja, aber ich kann nur den Dateinamen, aber nicht den Pfad dazu. – khusrav

+0

http://stackoverflow.com/questions/5657411/android-getting-a-file-uri-from-a-content-uri bietet ein Beispiel, wie das in Ihrem Fall von Frage zu tun. –

+0

interessant, danke, lass mich versuchen – khusrav

2

Ich war auch mit dem gleichen Problem konfrontiert. Ich habe den folgenden Code verwendet, um den Dateipfad von der Google Drive-Datei abzurufen. Es funktioniert für SkyDrive und auch für DropBox.

String filePath = null; 
Uri _uri = data.getData(); 
Log.d("", "URI = " + _uri);          
if(_uri != null && "content".equals(_uri.getScheme())) { 
    Cursor cursor = this.getContentResolver().query(_uri, new String[] { android.provider.MediaStore.Files.FileColumns.DATA }, null, null, null); 
    cursor.moveToFirst(); 
    filePath = cursor.getString(0); 
    cursor.close(); 
} else { 
    filePath = _uri.getPath(); 
} 
Log.d("", "Chosen path = " + filePath); 

Ich verwende die Absicht, um die Datei auszuwählen. Hier ist mein Code, um die Datei auszuwählen.

Intent intent = new Intent(Intent.ACTION_GET_CONTENT); 
String strType = "*/*"; 
intent.setDataAndType(Uri.parse(dir.getAbsolutePath()), strType); 
startActivityForResult(intent, PICKFILE_RESULT_CODE); 

Mein Code funktioniert gut und wenn ich Datei von internen oder externen Speicher. Ich möchte eine Datei von Google Drive mit demselben Code abrufen.

+1

Haben Sie ein Problem beim Herunterladen von Google Drive gefunden? –

+0

Der ursprüngliche Dateipfad konnte nicht abgerufen werden. – Madhu

+0

Jahangeer Ahmed was ist das? in Ihrem Code-Snipset zum Wählen einer Datei – Radoslav

Verwandte Themen