У меня есть onActivityResult
возврат из выбора образа медиастазы, в котором я могу получить URI для изображения, используя следующее:
Uri selectedImage = data.getData();
Преобразование этого в строку дает это:
content://media/external/images/media/47
Или дорожке дает:
/external/images/media/47
Однако я не могу найти способ преобразовать это в абсолютный путь, поскольку я хочу загрузить изображение в растровое изображение, не копируя его куда-либо. Я знаю, что это можно сделать с помощью URI и распознавателя контента, но, похоже, это не работает при перезагрузке телефона, я думаю, MediaStore
что между перезагрузками его нумерация не меняется.
android
uri
absolute-path
mediastore
stealthcopter
источник
источник
Ответы:
Ниже API 19 используйте этот код для получения пути к файлу из URI:
источник
Просто простое обновление первого ответа:
mActivity.managedQuery()
сейчас не рекомендуется. Я обновил код с новым методом.Android Dev Source
источник
content://...
вещь. Я попробовал все предложения здесь без удачи. Есть идеи почему?Для Орео
Для всех версий ниже Oreo я сделал этот метод, который получает реальный путь от URI
источник
Не пытайтесь найти URI в файловой системе, потому что поискать информацию в базе данных очень медленно.
Вы можете получить растровое изображение из URI, передавая поток ввода на фабрику так же, как вы передаете файл на фабрику:
источник
Вот мой пример получения имени файла из URI, такого как file: // ... и content: // .... Это работает для меня не только с Android MediaStore, но и с приложением третьей стороны, таким как EzExplorer.
источник
Хорошие существующие ответы, некоторые из которых я придумывал, свои собственные:
Я должен получить путь из URI и получить URI из путей, и Google с трудом может объяснить разницу, поэтому для всех, у кого есть такая же проблема (например, чтобы получить миниатюру из
MediaStore
видео, физическое местоположение которого у вас уже есть) ). Первый:Последний (который я делаю для видео, но также может быть использован для аудио или файлов или других типов хранимого контента, заменив MediaStore.Audio (и т. Д.) На MediaStore.Video):
По сути, в
DATA
столбцеMediaStore
(или в каком-либо его подразделе, к которому вы обращаетесь) хранится путь к файлу, поэтому вы либо используете то, что знаете, чтобы найти этоDATA
поле, либо используете это поле для поиска того, что вы хотите.Затем я использую,
Scheme
как указано выше, чтобы выяснить, что делать с моими данными:источник
Ни один из этих ответов не работал для меня во всех случаях. Я должен был перейти непосредственно к Документации Google https://developer.android.com/guide/topics/providers/document-provider.html по этой теме и нашел этот полезный метод:
Вы можете использовать это растровое изображение, чтобы отобразить его в представлении изображения.
источник
API 19 и выше , путь к файлу изображения из Uri работает отлично. Я также проверяю этот последний PIE API 28 .
источник
CursorIndexOutOfBoundsException: Index 0 requested, with a size of 0
в этой строке:path = cursor.getString(cursor.getColumnIndex(MediaStore.Images.Media.DATA));
попробуйте это получить путь к файлу изображения из Uri
источник
Решение для тех, у кого возникли проблемы после перехода на KitKat:
«Это позволит получить путь к файлу от MediaProvider, DownloadsProvider и ExternalStorageProvider, а также использовать неофициальный метод ContentProvider» https://stackoverflow.com/a/20559175/690777
источник
После получения изображения из галереи просто передайте URI в методе ниже только для Android 4.4 (KitKat):
источник
Попробуй это
Тем не менее, если у вас возникла проблема, чтобы найти реальный путь, вы можете попробовать мои ответы. Приведенные выше ответы не помогли мне.
Объяснение : - Этот метод получает URI, а затем проверяет уровень API вашего устройства Android, после чего в соответствии с уровнем API он генерирует реальный путь. Код для генерации метода реального пути отличается в зависимости от уровня API.
способ получить реальный путь из URI
Используйте этот метод, как это
Вывод:-
источник
String wholeID = DocumentsContract.getDocumentId(uri);
я получаю:java.lang.RuntimeException: Failure delivering result
Я сделал так:
источник
Так как managedQuery устарел, вы можете попробовать:
источник
Здесь я собираюсь показать вам, как создать кнопку BROWSE, при нажатии на которую она откроет SD-карту, вы выберете файл и в результате вы получите имя файла и путь к выбранному файлу. один:
Кнопка, которую вы нажмете
Функция, которая получит в результате имя файла и путь к файлу
источник
content://com.fsck.k9.attachmentprovider/34fc2cc9-aa46-45e9-9e3f-2f27f0457249/1/VIEW
. После применения методов, я все еще получаю ту же строку, а не правильный путь, то есть/mnt/sdcard/Android/data/com.fsck.k9/files/34fc2cc9-aa46-45e9-9e3f-2f27f0457249.db_att/1
. Есть какие-нибудь подсказки?Есть ли способ выхода из Android Q , когда MediaStore.Images.Media.DATA больше не будет доступен? Это поле устарело в Android Q:
https://developer.android.com/reference/android/provider/MediaStore.MediaColumns.html#DATA
--- Отредактировано
Насколько я знаю, для прошлой версии Android Q единственный способ - ретранслировать RELATIVE_PATH.
https://developer.android.com/reference/android/provider/MediaStore.MediaColumns.html#RELATIVE_PATH
источник
Слегка измененная версия @PercyPercy - она не выдает и просто возвращает ноль, если что-то пойдет не так :
источник
Здесь вы получите название файла
источник
Просто и легко. Вы можете сделать это из URI, как показано ниже!
источник
Это решение работает для каждого случая:
В некоторых случаях слишком сложно получить путь по URL. Тогда зачем тебе путь? Скопировать файл в другое место? Тебе не нужен путь.
источник
Отлично работающий для меня фиксированный код из этого поста :
источник
В качестве дополнения, если вам нужно проверить, существует ли файл, прежде чем пытаться открыть входной поток, вы можете использовать DocumentsContract.
(Код Котлина)
источник
Поскольку приведенные выше ответы не сработали для меня, вот решение, которое сработало для меня:
Для> 19 и <= 19 уровней API.
Этот метод охватывает все случаи, чтобы получить filePath из URI
источник
Чтобы получить любой путь к файлу, используйте это:
источник
Проверьте ниже метод работает потрясающе также Oreo 8.1 ..
Класс пути URI:
источник
Я делаю это с одним вкладышем:
val bitmap = MediaStore.Images.Media.getBitmap(contentResolver, uri)
Который в onActivityResult выглядит так:
источник
Теперь все сложно, особенно после API уровня 29 Android Q. Вот как вы должны получить имя файла из контента Uri
и вот как вы получаете полный путь Content Uri для всех версий Android
источник
Это отлично работает для меня, если ваша версия системы выше 19, надеюсь, это поможет вам.
источник
Bitmap bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(), uri);
источник