Дополнительно
FileProvider - IllegalArgumentException: не удалось найти настроенный корневой
Я'м пытаясь сделать снимок с камеры, но я'м получаю следующее сообщение об ошибке:
FATAL EXCEPTION: main
Process: com.example.marek.myapplication, PID: 6747
java.lang.IllegalArgumentException: Failed to find configured root that contains /storage/emulated/0/Android/data/com.example.marek.myapplication/files/Pictures/JPEG_20170228_175633_470124220.jpg
at android.support.v4.content.FileProvider$SimplePathStrategy.getUriForFile(FileProvider.java:711)
at android.support.v4.content.FileProvider.getUriForFile(FileProvider.java:400)
at com.example.marek.myapplication.MainActivity.dispatchTakePictureIntent(MainActivity.java:56)
at com.example.marek.myapplication.MainActivity.access$100(MainActivity.java:22)
at com.example.marek.myapplication.MainActivity$1.onClick(MainActivity.java:35)
AndroidManifest.xml:
<provider
android:name="android.support.v4.content.FileProvider"
android:authorities="com.example.marek.myapplication.fileprovider"
android:enabled="true"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_paths" />
</provider>
Ява:
Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
// Ensure that there's a camera activity to handle the intent
if (takePictureIntent.resolveActivity(getPackageManager()) != null) {
// Create the File where the photo should go
File photoFile = null;
try {
photoFile = createImageFile();
} catch (IOException ex) {
Toast.makeText(getApplicationContext(), "Error while saving picture.", Toast.LENGTH_LONG).show();
}
// Continue only if the File was successfully created
if (photoFile != null) {
Uri photoURI = FileProvider.getUriForFile(this,
"com.example.marek.myapplication.fileprovider",
photoFile);
takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, photoURI);
startActivityForResult(takePictureIntent, REQUEST_TAKE_PHOTO);
}
}
file_paths.xml
<?xml version="1.0" encoding="utf-8"?>
<paths>
<files-path name="my_images" path="images/"/>
</paths>
Я искал весь день об этой ошибке и пытаясь понять, FileProvider, но я понятия не имею, что это сообщение об ошибке пытается сказать мне. Если вы хотите получить больше информации/кода, напишите Мне в комментарии.
173
31
Ваш файл хранится под getExternalFilesDir()
. Что карты в
<внешнее-файлы-путь>, а не
<файлы-путь>. Кроме того, ваш путь к файлу не содержит изображений/ в нем, так что атрибут
путь` в ваш XML является недопустимым.Заменить res/xml/file_paths.xml` с:
Это может решить проблемы всякие: Все теги добавляются, так что вы Дон'т нужно беспокоиться о папках. Заменить res/xml/file_paths.xml с:
Есть аналогичная проблема после вкусов включено (Дев, этап).
Перед ароматами мой путь к ресурсу выглядела так:
После того, как добавил Android:власти=" и${ид_приложения}.fileprovider и" в манифесте приложения был ЛП.приложение myapp.dev или ЛП.приложение myapp.стадии зависит от вкуса и приложение начал рушится. Я убрал полный путь и заменил его точка и все начало работать.
Если вы используете внутренний кэш потом использовать.
Потеряли 2 недели пытаюсь найти какое-то решение... если вы приедете сюда после попробовать все выше:
1 - Проверьте, если ваш провайдер тегов внутри приложения тег
2 - Если вы попробуете много путей без успеха, то тест с этим:
Проверить это, если камера работает, то начать устранять некоторые линии и продолжить тестирование...
3 - Не забудьте проверить, если камера активируется в вашем эмуляторе.
Это смущает меня немного слишком.
Проблема на "Путь" и атрибутов в XML-файл.
Из этого документа FileProvider 'путь' - это подкаталог, но в другом документе (камеры/photobasics) показано 'путь' полный путь.
Я просто меняю это 'путь' полный путь к файлу и он просто работает.
Я буду поздно, но я нашла решение для нее.Работает нормально для меня, я просто изменил пути файл XML:
Проверьте, сколько хранилищ устройства предлагает - обмен файлами с внешнего хранилища не поддерживается. Посмотри на источник fileprovider.java (от support-основной пакет 25.3.1):
Итак, они берут только первая хранения.
Кроме того, вы можете видеть, что
getExternalCacheDirs()
используется, чтобы получить список хранилищ через интерфейс ContextCompat. См. <а href="https://developer.android.com/reference/android/content/Context.html#getExternalCacheDirs()">documentation</a> за ее пределы (это's сказала, чтобы не признать, например, флешек). Лучше всего, чтобы сделать некоторые отладки в списке хранилищ от этого API на свой собственный, так что вы можете увидеть, что путь к играм хранения багажа в пути перешла к
getUriForFile()`.Там'ы уже билет назначенный (как для 06-2017) в Google'ы трекера, с просьбой поддержать более одного хранилища. В конце концов, я нашел так что вопрос об этом, а также.
Я уверен, что я опоздала на вечеринку, но ниже работал для меня. ``<?XML-версия="и" и что quot кодировка="в кодировке UTF-8&;?&1.0 ГТ; <пути> <корень-путь имя="в корень" по пути=то".&и" /> </пути>
Следует помнить, что внешнее-путь не указывает на ваше вторичное хранилище, то " ака;съемными носителями и" (несмотря на название на "внешних" у). Если вы'вновь, как и"не удалось найти настроен корень" Вы можете добавить эту строку в XML-файл.
Ознакомиться более детально здесь https://stackoverflow.com/questions/40318116/fileprovider-and-secondary-external-storage
Ничего из этого не работает для меня. Единственный подход, который работает не объявить явный путь в XML. Так сделайте это и будьте счастливы:
Здесь также есть отличный учебник по этому поводу вопрос: https://www.youtube.com/watch?v=9ZxRTKvtfnY&Т=613s
Моя проблема была в том, что у меня было перекрытие имен в пути к файлам различных типов, вроде этого:
После того, как я изменил имена ("в cached_files-то"), чтобы быть уникальным, я избавился от ошибки. Я думаю, что эти пути хранятся в некоторых HashMap или что-то не допускает дубликатов.
Я потратил 5 часов на это..
Я пробовал все вышеперечисленные методы, но это зависит от того, что storeageбыл ваше приложение используется в данный момент.
https://developer.android.com/reference/android/support/v4/content/FileProvider#GetUri
Ознакомьтесь с документацией перед тем, как пробовать коды.
В моем случае с файлами-путь подкаталог "будет" контексте.getFilesDir()
. Фанки вещь-это контекст.getFilesDir()
Примечания другом подкаталоге.то, что я ищу-это
данных/пользователей/0/ком.ПШ.мтест/app_imageDir/20181202101432629.ПНГ`
возвращает `/данных/пользователей/0/ком.ПШ.мтест/файлы
так что тег должен быть
....
файлы-путь имя="в app_imageDir на" Путь=" от../app_imageDir/то" ......
Затем он работает!!
Этот работал для меня.Вместо того, чтобы дать полный путь я дал путь="по фотографии" и он работал нормально.
Я получаю эту ошибку
не удалось найти настроен корень, который содержит...
Следующим обойти решает мой вопрос
res/xml/file_paths.xml
<пути префиксом xmlns:Андроид="и http://schemas.android.com/apk/res/android"> <внешнее-путь имя="в СМИ" Путь=то".&и" /> </пути>
AndroidManifest.xml<поставщик Android:имя="на Андроид.поддержка.В4.содержание.FileProvider и" андроид:власти=то"[имя_пакета] и" для Android:экспортированы=то"ложные"и андроид:=с" grantUriPermissions;правда" и> <мета-данные Android:имя="на Андроид.поддержка.FILE_PROVIDER_PATHS и" андроид:ресурс=" и я с XML/file_paths&@;> </мета-данных и GT; </поставщик>
ActivityClass.javaпустота shareImage() { Намерение намерение = новое намерение(умысел.ACTION_SEND); намерениях.setType("и изображения/*" - а); намерениях.putExtra ("намерением".EXTRA_STREAM, FileProvider.getUriForFile(это,"У ком.slappstudio.pencilsketchphotomaker" и, selectedFilePath)); startActivity(умысла.createChooser(намерения,метода getString(Р. строкой.string_share_with))); }
ни один из выше работал для меня после нескольких часов отладки я выяснил, что проблема в createImageFile()
, относительный путь конкретно
абсолютный путь` против ``Я предполагаю, что вы используете официальный гид для Андроид для фотографирования. https://developer.android.com/training/camera/photobasics
Принять к сведению
storageDir
, это место, где файл будет создан. Поэтому для того, чтобы получить абсолютный путь этого файла, я просто использовать `изображения.getAbsolutePath (), этот путь будет использован в метод onActivityResult, если вам нужны растровые изображения после фотографированияниже находится file_path.xml`, просто используйте``. так что он использует абсолютный путь
и если вам нужно растровое изображение после фотографирования
Что я сделал, чтобы решить эту -
AndroidManifest.xml
filepaths.xml каталог (позволяя FileProvider поделиться все файлы, которые находятся внутри приложения's внешний файлов)
и в Java-класс
1.Создать XML-файл : provider_paths
2. Файл Mainfest
3.В Java-файл.
Официальный документ андроид говорит file_paths.xml должен иметь:
Следующие изменения в XML-файл file_paths работал для меня.