2013-03-23 6 views
6

Zuerst einige Kontext von dem, was ich versuche zu erreichen -Ermitteln Mime-Typ einer URI in Android von einer Absicht zurückgegeben?

Ich entwickle eine Image Sharing-Anwendung, für die ich den Benutzer ein Bild aus dem Dateisystem auswählen müssen.

Hierzu ich diesen Code verwende -

Intent photoPickerIntent = new Intent(Intent.ACTION_GET_CONTENT); 
    photoPickerIntent.setType("image/*"); 
    startActivityForResult(photoPickerIntent, REQUEST_CODE_IMAGE_PICKER_INTENT); 

Nun, dies löst eine Chooser wobei ich mehrere Optionen, einschließlich Galerie und ein Filemanager-App sehen, dass ich in meinem Telefon haben. Wenn ich Galerie auswähle und ein Bild von dort wähle, erhält meine Aktivität eine Absicht mit einem Inhaltsuri eines Bildes. Aber wenn ich die FileManager App wähle, kann ich jede Datei auswählen, die kein Bild sein kann. Also, was ich brauche, ist in der Lage zu sein, den Mime-Typ des uri zu bestimmen, der in der Absicht zurückgegeben wird. Die getType-Methode des Intents gibt null zurück.

Gibt es eine Möglichkeit, den Mime von der zurückgegebenen Absicht zu bestimmen, um festzustellen, ob der Inhalt ein Bild ist oder nicht.

Wenn dies nicht funktioniert, muss ich MimeTypeMap verwenden, um den Mime aus der Dateierweiterung zu ermitteln.

Antwort

17

Ich habe einen Weg gefunden, den Mime-Typ eines Inhalts-URI zu bekommen, aber nichts funktionierte für andere Arten von Uri's wie Uri's in der Form 'Datei: // .....'.

Um den MIME-Typ des Inhalts URIs zu bekommen -

ContentResolver cr = this.getContentResolver(); 
    String mime = cr.getType(YOUR_CONTENT_URI); 

Dieser nur für Inhalte URIs funktioniert. Für andere uri verwende ich MimeTypeMap, um ihre MIME-Typen aus der Dateierweiterung abzuleiten.

+0

habe ich versucht, die gleiche, in meinem 'onActivityResult()', aber 'getType (data.getData())' Rückkehr mich null – NarendraJi

4

wenn Sie URI haben, dann können Sie MIME-Typ wie

Uri uri = Uri.fromFile(file); 
ContentResolver cR = context.getContentResolver(); 
String mime = cR.getType(uri); 

erhalten oder versuchen // url = Dateipfad oder was auch immer geeignet URL Sie wollen.

public static String getMimeType(String url) 
{ 
    String type = null; 
    String extension = MimeTypeMap.getFileExtensionFromUrl(url); 
    if (extension != null) { 
     MimeTypeMap mime = MimeTypeMap.getSingleton(); 
     type = mime.getMimeTypeFromExtension(extension); 
    } 
    return type; 
} 

Weitere Details see these Answers

Verwandte Themen