Я пытаюсь опубликовать уведомление, которое позволяет пользователю открыть локально сохраненный файл. Мой код выглядит так:
Intent notificationIntent = new Intent(Intent.ACTION_VIEW);
notificationIntent.setAction(android.content.Intent.ACTION_VIEW);
Uri uri = Uri.fromFile(new File(filename));
notificationIntent.setData(uri);
Где "filename" - это полный путь к локально сохраненному файлу, обычно в каталоге /mnt/sdcard/download
. Файлы, которые я хочу отобразить, имеют различные типы: изображения, документы PDF, HTML и т. Д.
Это работает, но иногда Android пытается открыть файл как неправильный тип. Например, файл jpeg откроется в представлении веб-браузера, и вместо просмотра изображения я вижу двоичные данные из файла, отображаемые в виде текста. В других случаях это работает файл. Например, некоторые файлы PDF правильно открываются в программе просмотра PDF, а некоторые нет.
Я не уверен, почему это так. В документации сказано, что я не должен передавать явный тип контента. Если я установлю тип содержимого явно, все будет работать нормально. Проблема в том, что я не всегда знаю, каким должен быть тип контента (файл загружается из внешнего источника и может быть любым, и нет, тип MIME отсутствует в заголовках HTTP, я проверял это).
Что я могу сделать здесь? Есть ли какая-нибудь функция, которую я могу вызвать с именем файла, чтобы Android возвращал мне лучший тип контента для этого файла? Кроме того, почему это не происходит автоматически при обработке Намерения?
Спасибо.