Java MimetypesFileTypeMap всегда возвращает приложение / октет-поток на эмулятор Android

Я пытаюсь определить Mime / Media Type файлов, хранящихся на устройстве Android (фактически виртуальное устройство, которое я использую с эмулятором). Я нашел этот ресурс Получить MIME-тип из файла, который рекомендует javax.activation.MimetypesFileTypeMap , однако, когда я запускаю следующий код, я получаю application/octet-stream для всех типов файлов:

 MimetypesFileTypeMap map = new MimetypesFileTypeMap(); File dir = Environment.getExternalStorageDirectory(); File[] files = dir.listFiles(); String mimeType; for( int i = 0; i < files.length; ++i ) { if( files[i].isDirectory() == false ) { mimeType = map.getContentType(files[i]); if( mimeType.toLowerCase().equals("application/octet-stream") ) { Log.d("mytag", String.format( "Unable to determine the mime type of file %s.", files[i].getName())); } } } 

Я тестировал это с файлами, имеющими следующие расширения: jpg, txt, doc, xslx и pdf, и все они возвращают одно и то же. Есть ли что-то, что нужно сделать для инициализации карты? Может ли эта библиотека не найти список поддерживаемых mime-типов на Android? Есть ли лучший способ получить тип mime файла на Android?

И эта проблема тоже. В соответствии с Java-документами MimetypesFileTypeMap ищет

  1. Программно добавлены записи в экземпляр MimetypesFileTypeMap.
  2. Файл .mime.types в домашнем каталоге пользователя.
  3. Файл /lib/mime.types
  4. Файл или ресурсы с именем META-INF / mime-types
  5. Файл или ресурсы с именем META-INF / mime-types.default (обычно только в файле activation.jar)

Если ваши Mimetypes выходят как «application / octet-stream», это означает, что у вас нет ни одного из вышеуказанных файлов (или они присутствуют, но неполны) и не добавили никаких записей в ваш экземпляр MimetypesFileTypeMap.

Решать…

Формат спецификации mimetypesFileTypeMap mimetypes

 # comments start with hash marks # format is <mime type> <space separated file extensions> # for example, for an image mime type and a text mime type image png tif jpg jpeg bmp text txt text rtf TXT # either place those lines within the files specified by 2-4 or MimetypesFileTypeMap mtftp = new MimetypesFileTypeMap(); mtftp.addMimeTypes("image png tif jpg jpeg bmp") # and it's as easy as that!