2013-03-23 26 views
6

Najpierw jakiś kontekst tego, co próbuję osiągnąć -Określić typ Mime URI w Androidzie zwracany przez intencję?

Pracuję nad aplikacją Image Sharing, do której potrzebuję użytkownika, aby wybrać obraz z systemu plików.

Do tego używam tego kodu -

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

Teraz, to wyzwala Chooser którym widzę wiele opcji, w tym galerii i filemanager App że mam w moim telefonie. Jeśli wybiorę galerię i wybiorę z niej obraz, to moja Aktywność otrzyma Zamiar z zawartością URI Obrazu. Ale jeśli wybiorę aplikację FileManager, mogę wybrać dowolny plik, który może nie być obrazem. Potrzebuję więc, aby móc określić typ mime URI zwróconego w intencji. Metoda getType w intencji zwraca wartość null.

Czy istnieje sposób na określenie mime ze zwróconego zamiaru, aby móc stwierdzić, czy treść jest obrazem, czy nie.

Jeśli to nie działa w ten sposób, być może będę musiał użyć MimeTypeMap, aby określić mime z rozszerzenia pliku.

Odpowiedz

17

Znalazłem sposób na uzyskanie typu mime zawartości uri, ale nic nie działało dla innych rodzajów URI, takich jak uri w postaci "file: // .....".

Aby uzyskać typ mime Uri treści'S -

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

ta działa tylko dla uri treści. Tak więc dla innych Uri używam MimeTypeMap do wywnioskowania ich typu MIME z rozszerzenia pliku.

+0

Próbowałem to samo, w mojej 'onActivityResult()', ale 'GetType (data.getData())' powrocie mnie zerowa – NarendraJi

4

jeśli masz URI a następnie można uzyskać MIME jak

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

lub spróbuj // URL = ścieżkę pliku lub cokolwiek odpowiedni URL chcesz.

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; 
} 

Więcej szczegółów see these Answers