Get File Path From URI in Android JAVA
In Android when we pick an image, video, or any other type of file from the gallery, documents folder, or capture directly from the camera, we receive a URI object in intent. We have different ways to get a full file path from URI based on content providers. In this article, we will discuss how to get a file path from URI in Android for the coming files picked through Storage, Documents, as well as depending upon the _data field for the MediaStore and other file-based ContentProviders.
Following is the Java code if you are looking for Kotlin solution visit this Get Path From URI In Kotlin.
Utility Class to Get File Path From URI in Android
Create a file UriUtils.java and copy the following class in that file.
How to use UriUtils class
You might think that this class is too lengthy, but as mentioned above it handles all scenarios. It checks all android versions and the folders to what the Uri is appointing. It handles different types of content providers. There are different methods depending upon documents path, is it coming through downloads folder or media directory. It also checks is it picked through SECONDARY_STORAGE or EXTERNAL_STORAGE. Few other scenarios like Google Photos Uri, Google drive Uri are also handled properly. Just copy this class in your project as a utility class and rest will be handled by it.
That’s it. This is how to get file path from URI in Java Android.
Источник
How to determine MIME type of file in android?
November 2018
96.6k time
Suppose I have a full path of file like:(/sdcard/tlogo.png). I want to know its mime type.
I created a function for it
but when i call it, it returns null.
21 answers
Обратите супер пристальное внимание umerk44 «ы решения выше. getMimeTypeFromExtension вызывает guessMimeTypeTypeFromExtension и регистрозависимо. Я провел день на этом потом присмотрелся — getMimeTypeFromExtension вернется , NULL если вы передаете его «JPG» в то время как он будет возвращать «изображение / JPEG» , если передать его «JPG».
В первую очередь, вы должны рассмотреть вопрос вызова MimeTypeMap#getMimeTypeFromExtension() , как это:
Для Xamarin Android (от @ HoaLe Ответим выше)
Решение MimeTypeMap Возвращено нуль в моем использовании. Это работает, и проще:
Выше решение, возвращенное в нуль в случае .rar файл, используя URLConnection.guessContentTypeFromName (URL) работал в этом случае.
MimeTypeMap может не распознать некоторые расширения файлов, как FLV, MPEG, 3gpp, CPP. Таким образом, вы должны думать, как расширить MimeTypeMap для поддержания вашего кода. Вот такой пример.
Кроме того, здесь есть полный перечень типов пантомимы
Ни один из ответов здесь не совершенны. Вот ответ комбинируя лучшие элементы всех лучших ответов:
Я судимый использовать Standart методу для определения типа пантомимы, но я не могу сохранить расширение файла с помощью MimeTypeMap.getFileExtensionFromUrl (uri.getPath ()). Этот метод возвращал мне пустую строку. Так что я сделал нетривиальное решение сохранить Расширение файла.
Вот метод, возвращающий Расширение файла
И сохранивший Расширение файла можно получить тип пантомимы, как показано ниже
Иногда Джеб и ответы Jens не работают и возвращают нуль. В этом случае я использую последующие решения. Глава файла обычно содержит тип подписи. Я прочитал его и сравнить с известными в списке подписей .
signatureId является показателем подписи в массиве подписей. Например,
Теперь у меня есть тип файла , даже если URI файла нет. Затем я получаю тип пантомимы по типу файла. Если вы не знаете , какой тип мима получить, вы можете найти правильные в этой таблице .
Она работает для многих типов файлов. Но для видео не работает, потому что вам нужно известный видеокодек , чтобы получить тип MIME. Для того, чтобы получить тип мим видео ; я использую MediaMetadataRetriever .
Источник