2016-04-02 6 views
-2

Ich möchte den absoluten Pfad einer Datei erhalten, die aus einer Dateiauswahl ausgewählt wird.
Mein OnActivityesult() ist wie unten:Wie bekomme ich den absoluten Pfad einer Datei?

if(resultCode == RESULT_OK) { 
     switch(requestCode) { 
      case 1: 
       Uri pathUri = data.getData(); 
       File userFile = new File(pathUri.getPath()); 
       IMG_PATH = userFile.getParentFile().getAbsolutePath(); 
       Snackbar.make(getCurrentFocus(), IMG_PATH, Snackbar.LENGTH_SHORT).show(); 
       ShowConfirmation(IMG_PATH); 
       break; 
     } 
    } 

aber dieser Code kehrt wie /document/primary:miniclipId.txt.
Ich brauche den echten Pfad wie mnt/sdcard1/miniclipId.txt.
Der Benutzer wählt .img Datei von SD-Karte oder intern.
Kann mir jemand sagen, wie kann ich den Pfad string so bekommen?

+0

Mögliches Duplikat von [Dateipfad vom Google Drive in Lollipop abrufen (MediaStore.MediaColumns.DATA == null)] (http://stackoverflow.com/questions/29378651/get-filepath-from-google-drive-in-lollipop) -mediastore-mediacolumns-data-null) – user1643723

+0

Dieser Code ist für die Auswahl '.img' Datei von SD-Karte, nicht die Mediendateien – Kannan

+0

Die Quelle der Datei ist irrelevant. Ich empfehle Ihnen, die Antwort auf die verknüpfte Frage zu lesen. – user1643723

Antwort

1

aber dieser Code returen wie /document/primary:miniclipId.txt.

Sie haben eine Uri von einer ContentProvider erhalten.

Ich brauche den echten Pfad wie mnt/sdcard1/miniclipId.txt.

Eine Uri ist keine Datei. Es gibt keine Anforderung, dass es einen "echten Pfad" gibt, geschweige denn einen, der für Sie von Bedeutung ist.

Verwenden Sie ContentResolver und Methoden wie openInputStream() bis consume the content pointed to by the Uri.

Wenn Sie unbedingt eine Datei benötigen, verwenden Sie openInputStream() und kopieren Sie den Inhalt in eine Datei, die Sie steuern.

1

u kann diese Funktion verwenden, um realen Weg des media.u bekommt nur passieren müssen uri, dass u in onActivityResult get() Methode

public String mf_szGetRealPathFromURI(final Uri ac_Uri) { 
    String result = ""; 
    boolean isok = false; 
    Cursor cursor = null; 
    try { 
     String[] proj = {MediaStore.Images.Media.DATA}; 
     cursor = getContentResolver().query(ac_Uri, proj, 
       null, null, null); 
     int column_index = cursor 
       .getColumnIndexOrThrow(MediaStore.Images.Media.DATA); 
     cursor.moveToFirst(); 
     result = cursor.getString(column_index); 
     isok = true; 
    } finally { 
     if (cursor != null) { 
      cursor.close(); 
     } 
    } 
    return isok ? result : ""; 
} 
0

Das ist, was ich seit Jahren mit

public static String getRealPathFromURI(Uri contentUri, Context activity) { 
    String path = null; 
    try { 
     final String[] proj = {MediaStore.MediaColumns.DATA}; 
     final Cursor cursor = ((Activity) activity).managedQuery(contentUri, proj, null, null, null); 
     final int column_index = cursor.getColumnIndexOrThrow(MediaStore.MediaColumns.DATA); 
     cursor.moveToFirst(); 
     path = cursor.getString(column_index); 
    } catch (Exception e) { 
    } 
    if (path != null && path.length() > 0) { 
     return path; 
    } else return contentUri.getPath(); 
} 
Verwandte Themen