Я знаю абсолютный путь изображения (например, /sdcard/cats.jpg). Есть ли способ получить содержимое URI для этого файла?
На самом деле в своем коде я загружаю изображение и сохраняю его в определенном месте. Чтобы установить изображение в экземпляре ImageView, в настоящее время я открываю файл, используя путь, получаю байты и создаю растровое изображение, а затем устанавливаю растровое изображение в экземпляре ImageView. Это очень медленный процесс, вместо этого, если бы я мог получить содержимое URI, то я мог бы очень легко использовать метод imageView.setImageUri(uri)
Ответы:
Попробуйте с:
Или с:
источник
Uri.fromFile
не будет работать на Android 26+, вы должны использовать файловый провайдерОБНОВИТЬ
У меня был такой же вопрос для моей файловой активности. Вы должны знать, что contenturi для файла поддерживает только медиастроительные данные, такие как изображения, аудио и видео. Я даю вам код для получения изображения URI от выбора изображения из SDCard. Попробуйте этот код, может быть, он будет работать для вас ...
источник
MediaStore.Images.Media
наMediaStore.Video.Media
, но все же не повезло.// Этот код работает для изображений на 2.2, не уверен, если другие типы носителей
источник
Принятое решение, вероятно, является лучшим выбором для ваших целей, но на самом деле ответит на вопрос в строке темы:
В моем приложении я должен получить путь из URI и получить URI из путей. Бывший:
Последний (который я делаю для видео, но также может быть использован для аудио или файлов или других типов хранимого контента, заменив MediaStore.Audio (и т. Д.) На MediaStore.Video):
По сути, в
DATA
столбцеMediaStore
(или в любом из его подразделов, к которому вы обращаетесь) хранится путь к файлу, поэтому вы используете эту информацию для его поиска.источник
OpenableColumns.DISPLAY_NAME & OpenableColumns.SIZE
если отправляющее приложение даже следует «правилам». Я обнаружил, что некоторые основные приложения возвращают только эти два поля, а не всегда_data
поле. В случае, когда у вас нет поля данных, которое обычно содержит прямой путь к контенту, вы должны сначала прочитать контент и записать его в файл или в память, а затем у вас есть свой собственный путь.Вы можете использовать эти два способа в зависимости от использования
Uri uri = Uri.parse("String file location");
или
Uri uri = Uri.fromFile(new File("string file location"));
Я пробовал оба пути, и оба работают.
источник
Самый простой и надежный способ создания Content Uri
content://
из файла - это использование FileProvider . Uri, предоставляемый FileProvider, можно использовать также, предоставляя Uri для обмена файлами с другими приложениями. Чтобы получить File Uri по абсолютному пути,File
вы можете использовать DocumentFile.fromFile (новый файл (путь, имя)), он добавлен в Api 22 и возвращает ноль для версий ниже.источник
Уже поздно, но может помочь кому-то в будущем.
Чтобы получить URI контента для файла, вы можете использовать следующий метод:
FileProvider.getUriForFile(Context context, String authority, File file)
Возвращает URI контента.
Проверьте это, чтобы узнать, как настроить
FileProvider
источник
Получение идентификатора файла без написания кода, просто с помощью команд консоли командной строки adb:
источник
Permission Denial: Do not have permission in call getContentProviderExternal() from pid=15660, uid=10113 requires android.permission.ACCESS_CONTENT_PROVIDERS_EXTERNALLY
, если вы не укоренились.Лучше использовать проверку для поддержки версий до Android N, например:
https://es.stackoverflow.com/questions/71443/reporte-crash-android-os-fileuriexposedexception-en-android-n
источник
Вы можете попробовать ниже фрагмент кода
источник