2013-04-22 9 views
5

Ich verwende eine Absicht, um den Benutzer eine Datei auswählen zu lassen, und nachdem der Benutzer das getan hat, möchte ich wissen, welche Art von Dateityp die ausgewählte Datei ist.ACTION_GET_CONTENT: Wie bekomme ich die Dateiendung, wenn ich nach mehreren Dateitypen suche?

Die Absicht:

Intent intent = new Intent(Intent.ACTION_GET_CONTENT); 
intent.setType("*/*"); 

In meinem onActivityResult Ich möchte den Weg von der Absicht durch intent.getData extrahieren() und alle seine "Untermethoden" (getScheme(), getLastPathSegment() usw.). Allerdings erhalte ich nur den Uri für die ausgewählte Datei.

Beispiel für Uris':

Uri: content://media/external/audio/media/15185 //This is an audiofile 
Uri: content://media/external/audio/media/20 //Another audiofile 
Uri: content://media/external/images/media/20577 //this is a picture 
Uri: file:///storage/emulated/0/testWed%20Apr%2017%2011%3A10%3A34%20CEST%202013 //This is a file 

Ich habe gesehen, Lösungen, wie den absoluten Pfad zu erhalten, wenn der Benutzer nur zu wählen, Bilder oder Audios erlaubt. Aber wie mache ich den AbsolutePath (den echten Pfad mit dem Namen und der Dateiendung, z. B. MyPicture.jpeg), wenn ich dem Benutzer erlauben möchte, aus verschiedenen Dateitypen auszuwählen?

Der Code Ich habe mit worden twiggling zu versuchen, den Pfad-Namen in onActivityResult (int requestCode, int Result

  String fileName = data.getData().getLastPathSegment().toString(); 
     System.out.println("Uri: " +data.getData().toString()); 
     File f = new File(fileName); 
     System.out.println("TrYinG wIWThA Da FiLE: " +f.getAbsolutePath()); 
     System.out.println("FileNAME!!!: "+fileName); 

Antwort

4

von Datei-Endung Ich gehe davon aus Sie die Dateierweiterung bedeuten zu bekommen? (dh mp4)

Wenn ja, können Sie die ContentResolver verwenden, um die MIME-Typ zu erhalten:

String mimeType = getContentResolver().getType(sourceUri); 

Dies gibt Ihnen die MIME-Typ vorausgesetzt, sie innerhalb dersindsollten sie, wenn Sie den Inhalt Uri haben. so dass Sie so etwas wie „image/jpeg“, „video/mp4“ usw.

Dann bekommen Sie MimeTypeMap verwenden, um die Dateierweiterung aus dem MIME-Typ zu erhalten:

String extension = MimeTypeMap.getSingleton().getExtensionFromMimeType(mimeType); 

Beachten Sie, dass Sie sollten Teilen Sie den MIME-Typ nie nach "/" ab, um die Erweiterung zu erhalten, da einige MIME-Typen ihre Erweiterung nicht verwenden, z. B. ".mov" -Dateien mit dem MIME-Typ "video/quicktime"