Failed to find configured root that contains storage emulated 0 android data

Содержание
  1. Android: FileProvider Issue: Failed to find configured root that contains . #218
  2. Comments
  3. michaelmika commented Feb 27, 2018 •
  4. Versions:
  5. nu5rim3 commented Mar 16, 2018
  6. ricardochen commented Mar 20, 2018
  7. ricardochen commented Mar 20, 2018
  8. Mifayo commented Mar 29, 2018 •
  9. same here
  10. svnshikhil commented Apr 4, 2018
  11. tuananhluong commented Apr 15, 2018 •
  12. Catlc commented May 16, 2018
  13. tuananhluong commented May 17, 2018
  14. zynnthen commented Jun 12, 2018 •
  15. yeomann commented Jul 27, 2018
  16. jgcmarins commented Jul 27, 2018
  17. vforvasile commented Sep 29, 2018
  18. jgcmarins commented Sep 29, 2018
  19. raulcostea77 commented Oct 1, 2018
  20. lucaspang commented Oct 26, 2018
  21. [Android] TakePhotoAsync — IllegalArgumentException: failed to find configured root #329
  22. Comments
  23. Knots23 commented Aug 23, 2017 •
  24. Bug Information
  25. Steps to reproduce the Behavior
  26. Expected Behavior
  27. Actual Behavior
  28. Code snippet
  29. jamesmontemagno commented Aug 23, 2017
  30. Knots23 commented Aug 24, 2017
  31. jamesmontemagno commented Aug 30, 2017
  32. obartelt commented Sep 26, 2017
  33. mrTR24 commented Oct 2, 2017 •
  34. Ошибка FileProvider на устройствах Huawei
  35. FileProvider — IllegalArgumentException: Не удалось найти настроенный root
  36. ОТВЕТЫ
  37. Ответ 1
  38. Ответ 2
  39. Ответ 3
  40. Ответ 4
  41. Ответ 5
  42. Ответ 6
  43. Ответ 7
  44. Ответ 8
  45. Ответ 9
  46. Ответ 10
  47. Ответ 11
  48. Ответ 12
  49. Ответ 13
  50. Ответ 14
  51. Ответ 15
  52. Ответ 16
  53. data/user/0/com.psh.mTest/app_imageDir/20181202101432629.png
  54. Ответ 17
  55. Ответ 18
  56. Ответ 19
  57. Ответ 20
  58. Ответ 21
  59. Ответ 22
  60. Ответ 23
  61. Ответ 24
  62. Ответ 25
  63. Ответ 26
  64. Ответ 27
  65. Ответ 28
  66. Ответ 29
  67. Ответ 30

Android: FileProvider Issue: Failed to find configured root that contains . #218

Comments

michaelmika commented Feb 27, 2018 •

my problem is related to #202 . I am also using react-native-image-crop-picker which implements FileProvider in their own Manifest. Therefore I override their FileProvider Entry in my Manifest (note: I do not override the android:authorities entry, but the path ressource):

file_paths.xml looks like this (note: I also added the path defined by react-native-image-crop-picker ‘s Manifest):

I also edited my MainApplication and added the following (note: BuildConfig.APPLICATION_ID instead of $ as in this docs, saw this suggestion in one PR):

Now, trying really everything, I do not believe anymore that it is caused (only) by react-native-image-crop-picker as in #202 . I now get this error:

My react-native use of the Share library looks this way:

and the file is created before at dir: RNFS.ExternalDirectoryPath + «/test.txt» . I have also tried every other RNFS Directory (e.g. DocumentDirectoryPath). The file is really there, i can read it with RNFS .

What am I missing? Have now worked on this for days and really need to get around this problem.

Versions:

react-native-share: 1.0.26
react-native: 0.52.2
react-native-image-crop-picker: 0.19.1

The text was updated successfully, but these errors were encountered:

nu5rim3 commented Mar 16, 2018

# Any solution

ricardochen commented Mar 20, 2018

Same problem here.

ricardochen commented Mar 20, 2018

I ended up taking the URI and converting it to base64 , working in android, not tested in iOS

Mifayo commented Mar 29, 2018 •

same here

svnshikhil commented Apr 4, 2018

tuananhluong commented Apr 15, 2018 •

I resolved as bellow, may be can help someone.

Step1: In the file app/src/main/AndroidManifest.xml,

  1. Use xmlns:tools
    Example in my app:

Step2: Create file provider_paths.xml at app/src/main/res/xml/
Example in my app:

Step3: Update MainApplication.java, implement ShareApplication

Example in my app:

Noted: com.ulo is my applicationId, change to your applicationId (you can check id in app/build.gradle)

Package: react-native / react-native-share / react-native-image-crop-picker

Catlc commented May 16, 2018

Step3 !!! return «com.ulo.provider»; This value is not passed in the past and getFileProviderAuthority Not be invoked why????

tuananhluong commented May 17, 2018

@Catlc ulo is my applicationId, replace by your appid

zynnthen commented Jun 12, 2018 •

try this at your file_paths

yeomann commented Jul 27, 2018

this seems fixed, can we close?

jgcmarins commented Jul 27, 2018

already fixed on 1.1.0.

vforvasile commented Sep 29, 2018

Not fixed, not very fun.

jgcmarins commented Sep 29, 2018

@vforvasile which errors are you experiencing?

raulcostea77 commented Oct 1, 2018

@vforvasile, besides what @tuananhluong posted, I added the following line to my filepaths.xml:

This seems to have fixed my issue

lucaspang commented Oct 26, 2018

I have the same problem, my file is saved at:
file:///data/user/0/com.applicationId/cache/image_manager_disk_cache/a551283a40d90aa951eb098148ed0a6423a78ec29f8df43a7fe2a79a7f85794d.0

and getting this error:
Failed to find configured root that contains /data/data/com.applicationId/cache/image_manager_disk_cache/a551283a40d90aa951eb098148ed0a6423a78ec29f8df43a7fe2a79a7f85794d.0

I have already applied all possible path in provider path and still no luck

Источник

[Android] TakePhotoAsync — IllegalArgumentException: failed to find configured root #329

Comments

Knots23 commented Aug 23, 2017 •

I’m running into issues with the TakePhotoAsync method.
They don’t occur on iOS, nor on Android with Target SDK 23.

Читайте также:  Относительные размеры android studio

Note: all ‘MY_PACKAGE_NAME’ found below are actually containing the correct package. 😉

  • issue 312
    • Settings the external path in file_paths.xml to ‘Pictures’ as specified in the readme throws the exception.
    • Settings the external path in file_paths.xml to ‘Android/data/MY_PACKAGE_NAME/files/Pictures’ throws the exception.
  • issue 326
    • This seems to occur when you don’t add the entries to the manifest / file_paths.xml as specified in the readme.

Bug Information

Version Number of Plugin: 2.6.2
Device Tested On: Samsung S8 (Android 7.0), iPhone 5s
Simulator Tested On: n.a.
Version of VS: Visual Studio 2017 15.3
Version of Xamarin: 2.3.4.267
Versions of other things you are using: Plugin.Permissions 1.2.1

Steps to reproduce the Behavior

Everything should be setup as described in the readme:

  • Target Android SDK is 25, so:
    • xml folder was created under Resources
    • file_paths.xml was created under that xml folder
    • the provider was added to the manifest, where the package name placeholder was replaced with my own package name.

Create a view and view model where the view model holds an ICommand to handle, e.g. a button click.
Call the TakePhotoAsync in the handler.

Expected Behavior

The camera dialog will be opened and allows you to take a picture.

Actual Behavior

An exception is thrown:
Java.Lang.IllegalArgumentException: Failed to find configured root that contains /storage/emulated/0/Android/data/MY_PACKAGE_NAME/files/Pictures/IMG_20170823_130231.jpg

The ‘Pictures’ folder was created, both on the internal and external storage. There’s just no image.

Code snippet

The text was updated successfully, but these errors were encountered:

jamesmontemagno commented Aug 23, 2017

What is your package name? It must be set to something like «com.company.appname»

Rest assured this works fine just try the samples.

Knots23 commented Aug 24, 2017

The package name is correct and exactly in the form ‘com.company.appname’.

The permissions should not be the issue. These are set (among others):

  • Camera
  • Write External Storage
  • Read External Storage

Like I said, it did work with Android API 23, but after upgrading to 25 it stopped, even though I followed the readme and add all extra settings.

jamesmontemagno commented Aug 30, 2017

If you can create a small sample that I can reproduce send it my way to test out.

obartelt commented Sep 26, 2017

I had the same problem. You need to change the file_paths.xml. It must read:

mrTR24 commented Oct 2, 2017 •

following +1 .same problem with target sdk 24 . works fine with 23

Источник

Ошибка FileProvider на устройствах Huawei

У меня есть исключение, которое происходит только на устройствах Huawei в моем приложении при использовании FileProvider.getUriForFile :

Вот определение моего поставщика файлов в моем манифесте:

Файл ресурсов с настроенными путями:

Любая идея о причине этой проблемы и почему это происходит только на устройствах Huawei? Как мне отладить это, учитывая, что у меня нет устройства Huawei?

ОБНОВИТЬ:

Я добавил больше журналов в свое приложение, и я получил некоторые непоследовательные результаты при печати как ContextCompat.getExternalFilesDirs и context.getExternalFilesDir на этих устройствах:

Это несовместимо с документацией ContextCompat.getExternalFilesDirs которая заявляет, что The first path returned is the same as getExternalFilesDir(String)

Это объясняет проблему, так как я использую context.getExternalFilesDir в своем коде, а FileProvider использует ContextCompat.getExternalFilesDirs .

Обновление для Android N (оставив исходный ответ ниже и подтвердив, что этот новый подход работает в производстве):

Как вы отметили в своем обновлении, многие модели устройств Huawei (например, KIW-L24, ALE-L21, ALE-L02, PLK-L01 и многие другие) нарушают контракт Android для вызовов ContextCompat#getExternalFilesDirs(String) . Вместо того, чтобы возвращать Context#getExternalFilesDir(String) (т.е. запись по умолчанию) в качестве первого объекта в массиве, они вместо этого возвращают первый объект в качестве пути к внешней SD-карте, если таковой присутствует.

Разрушая этот контракт на заказ, эти устройства Huawei с внешними SD-картами будут сбой с IllegalArgumentException при вызовах FileProvider#getUriForFile(Context, String, File) для корней external-files-path . Хотя существует множество решений, которые вы можете предпринять, чтобы попытаться решить эту проблему (например, написать пользовательскую реализацию FileProvider ), я нашел, что самый простой подход – уловить эту проблему и:

  • Pre-N: Возврат Uri#fromFile(File) , который не будет работать с Android N и выше из-за FileUriExposedException
  • N: Скопируйте файл в свой cache-path (обратите внимание: это может ввести ANR, если это сделано в потоке пользовательского интерфейса), а затем вернуть FileProvider#getUriForFile(Context, String, File) для скопированного файла (т. FileProvider#getUriForFile(Context, String, File) избежать ошибки)

Код для этого можно найти ниже:

Наряду с file_provider_paths.xml :

После того как вы создали такой класс, замените свои вызовы на:

Честно говоря, я не думаю, что это особенно грациозное решение, но это позволяет нам использовать официально зарегистрированное поведение Android, не делая ничего слишком радикального (например, написание пользовательской реализации FileProvider ). Я тестировал это на производстве, поэтому могу подтвердить, что он устраняет эти сбои Huawei. Для меня это был лучший подход, поскольку я не хотел тратить слишком много времени на то, что явно является дефектом производителя.

Читайте также:  Nfs heat для андроид

Обновление до устройств Huawei с этой ошибкой, обновленной до Android N:

Это не будет работать с Android N и выше из-за FileUriExposedException , но мне еще предстоит столкнуться с устройством Huawei с этой неправильной конфигурацией на Android N.

У меня была такая же проблема, и в конечном итоге мое решение заключалось в том, чтобы всегда использовать вызов ContextCompat.getExternalFilesDirs для создания File который используется как параметр для FileProvider . Таким образом, вам не нужно использовать какие-либо из вышеперечисленных способов обхода.

Другими словами. Если у вас есть контроль над параметром File который вы используете для вызова FileProvider и / или вам все равно, что файл может быть сохранен вне каталога classic /storage/emulated/0/Android/data/ (который должен быть Отлично, поскольку все это одна и та же SD-карта), тогда я предлагаю сделать то, что я сделал.

Если это не ваше дело, я предлагаю использовать вышеупомянутый ответ с пользовательской реализацией getUriForFile .

Мое решение этой проблемы прямо сейчас, даже если это не так, заключается в объявлении моего FileProvider следующим путем (чтобы можно было обслуживать все файлы на устройстве):

Это официально не документировано и может разорваться с будущей версией библиотеки поддержки v4, но я не вижу другого решения для работы с файлом во вторичном внешнем хранилище (часто с SD-картой) с использованием существующего FileProvider .

Источник

FileProvider — IllegalArgumentException: Не удалось найти настроенный root

Я пытаюсь сделать снимок с камерой, но я получаю следующую ошибку:

Я искал весь день об этой ошибке и пытался понять FileProvider , но я понятия не имею, что это сообщение об ошибке пытается мне рассказать. Если вы хотите получить дополнительную информацию/код, напишите мне в комментарии.

ОТВЕТЫ

Ответ 1

Ваш файл хранится в getExternalFilesDir() . Это сопоставляется с , а не . Кроме того, ваш путь к файлу не содержит images/ в нем, поэтому атрибут path в вашем XML недопустим.

Замените res/xml/file_paths.xml на:

Ответ 2

Аналогичная проблема возникла после активированных ароматов (dev, stage).

До того, как ароматы моего ресурса путей выглядели так:

После добавления android: authority = «$ .fileprovider» в Manifest appId был pl.myapp.dev или pl.myapp.stage зависит от вкуса, и приложение начало сбой. Я удалил полный путь и заменил его точкой, и все начало работать.

Ответ 3

Это может решить любую проблему: все теги добавляются, поэтому вам не нужно беспокоиться о пути к папкам. Замените res/xml/file_paths.xml следующим образом:

Ответ 4

Если вы используете внутренний кеш, используйте его.

Ответ 5

Это тоже смущает меня.

Проблема заключается в атрибуте «path» в вашем XML файле.

Из этого документа FileProvider ‘path’ — это подкаталог, но в другом документе (камера/фотобаза) «путь» — полный путь.

Я просто изменяю этот «путь» на полный путь, и он просто работает.

Ответ 6

Проверьте, сколько хранилищ вашего устройства предлагает — совместное использование файлов из вторичного хранилища не поддерживается. Посмотрите на источник FileProvider.java (из поддержки-core-utils 25.3.1):

Таким образом, они берут только первое хранилище.

Кроме того, вы можете видеть, что getExternalCacheDirs() используется для получения списка хранилищ через интерфейс ContextCompat . См. документация в своих пределах (он сказал, чтобы не распознавать USB-вспышки, например). Лучше всего сделать отладочный вывод списка хранилищ из этого API самостоятельно, чтобы вы могли проверить, что путь к хранилищу соответствует пути, переданному в getUriForFile() .

Ответ 7

Я бы опоздал, но нашел решение для него. Работая отлично, я просто изменил файл XML пути:

Ответ 8

Имейте в виду, что внешний путь не указывает на ваше вторичное хранилище, а также «съемное хранилище» (несмотря на название «внешний»). Если вы получаете «Не удалось найти настроенный root», вы можете добавить эту строку в свой XML файл.

Ответ 9

Ничто из этого не сработало для меня. Единственный подход, который работает, заключается не в том, чтобы объявить явный путь в xml. Так сделайте это и будьте счастливы:

Ответ 10

Я уверен, что я опоздал на вечеринку, но ниже работал для меня.

Ответ 11

Моя проблема заключалась в том, что у меня были перекрывающиеся имена в пути к файлам для разных типов, например:

После того, как я изменил имена («cached_files»), чтобы быть уникальными, я избавился от этой ошибки. Я предполагаю, что эти пути хранятся в некоторых HashMap или что-то, что не позволяет дублировать.

Ответ 12

Потерял 2 недели, пытаясь найти решение. Если вы прибываете сюда после того, как попробуйте что-нибудь выше:

1 — Убедитесь, что ваш поставщик тегов находится внутри приложения тегов

2 — Если вы безуспешно пробуете много путей, попробуйте следующее:

Проверьте это, если камера работает, затем начните устранять некоторые строки и продолжайте тестирование.

3 — Не забудьте проверить, активирована ли камера в вашем эмуляторе.

Ответ 13

Это работало и для меня. Вместо того, чтобы давать полный путь, я дал путь = «Картинки», и он отлично работал.

Читайте также:  Here drive навигатор для андроид

Ответ 14

Что я сделал для этого —

filepaths.xml(разрешить FileProvider обмениваться всеми файлами, находящимися в каталоге внешних файлов приложения)

и в классе java —

Ответ 15

ни один из вышеперечисленных не работал для меня, после нескольких часов отладки я узнал, что проблема в createImageFile() , в частности absolute path и relative path

Я предполагаю, что вы, ребята, используете официальное руководство по Android для фотосъемки. https://developer.android.com/training/camera/photobasics

Обратите внимание на storageDir , это место, где будет создан файл. Поэтому, чтобы получить абсолютный путь к этому файлу, я просто использую image.getAbsolutePath() , этот путь будет использоваться в onActivityResult если вам нужно изображение растрового изображения после съемки

ниже file_path.xml , просто используйте . так что он использует абсолютный путь

и если вам нужно растровое изображение после съемки

Ответ 16

Я потратил 5 часов на это..

Я перепробовал все методы, описанные выше, но это зависит от того, какое хранилище использует ваше приложение.

Проверьте документацию, прежде чем пытаться коды.

В моем случае, так как files-path будет Context.getFilesDir() . Самое Context.getFilesDir() что Context.getFilesDir() друг на друга.

data/user/0/com.psh.mTest/app_imageDir/20181202101432629.png

поэтому тег должен быть

. files-path name=»app_imageDir» path=»../app_imageDir/».

Тогда это работает!

Ответ 17

Я получаю эту ошибку Failed to find configured root that contains.

Следующая работа решает мою проблему

Рез /XML/file_paths.xml

AndroidManifest.xml

ActivityClass.java

Ответ 18

Официальный документ Android говорит, что file_paths.xml должен иметь:

Но чтобы заставить его работать в последнем андроиде, в конце пути должно быть «/», например:

Ответ 19

Следующее изменение файла xml file_paths сработало для меня.

Ответ 20

Я наконец нашел свою проблему. Я описал это в этой ссылке.

моя проблема заключалась в различии между идентификатором приложения в режиме отладки и выпуска

Ответ 21

Это зависит от того, какое хранилище вы хотите делать, ВНУТРЕННЕЕ или ВНЕШНЕЕ

для ВНЕШНЕГО ХРАНЕНИЯ

но для ВНУТРЕННЕГО ХРАНЕНИЯ, будьте осторожны с этим путем, потому что он использует метод getFilesDir(), который означает, что ваш файл будет находиться в корневом каталоге приложения («/»)

Таким образом, ваш файл поставщика должен выглядеть следующим образом:

Ответ 22

Я вижу, что по крайней мере вы не предоставляете тот же путь, что и другие, в file_paths.xml. Поэтому, пожалуйста, убедитесь, что вы указали то же самое имя или путь пакета в трех местах, включая:

  • android:authorities атрибут в манифесте
  • path атрибут в file_paths.xml
  • authority при вызове FileProvider.getUriForFile().

Ответ 23

  • Для пользователей Xamarin.Android

Это также может быть результатом не обновления пакетов поддержки при настройке Android 7.1, 8.0+. Обновите их до v25.4.0.2 +, и эта конкретная ошибка может исчезнуть (если вы правильно настроили файл file_path, как утверждают другие).

Предоставление контекста: я переключился на таргетинг Oreo из Нуга в приложение Xamarin.Forms и сделайте снимок с Xam.Plugin.Mediaначалось сбой с указанным выше сообщением об ошибке, поэтому обновление пакетов помогло нормально.

Ответ 24

Я заметил, что политика или поведение файла path.xml изменилось между библиотекой поддержки 26 и 27. Для захвата изображения с камеры я увидел следующие изменения:

С 26 я должен был использовать и полный путь, указанный в аргументе path .

С 27 я должен был использовать и только подпапку в аргументе path .

Итак, что конкретно работало для меня в Support Library 27, поскольку файл path.xml был

Ответ 25

У меня была та же проблема, я попробовал приведенный ниже код для его работы.

1.Создать Xmlfile: provider_paths

2. Файл Mainfest

3.В файле Java.

Ответ 26

Привет друзья Попробуйте это

1) Как объявить 2 поставщика файлов в манифесте.

2) Первый провайдер для загрузки файла

3) второй провайдер, используемый для камеры и галерей

ШАГ 1

Provider_paths.xml

Второй провайдер

file_path.xml

.Utils.MyFileProvider

Создать класс MyFileProvider (только создать класс, который не объявляет какой-либо метод)

Когда вы использовали File Provider used (.fileprovider), это имя использовалось для изображения (.provider).

ЕСЛИ какая-либо проблема. Чтобы понять этот код, вы можете связаться по адресу [email protected] Я помогу вам.

Ответ 27

Если ничего не помогает, и вы получаете ошибку

затем попробуйте изменить некоторую строку, например:

что странно, поскольку папка, к которой я обращаюсь, — это /images .

Ответ 28

Проблема может быть не только в пути XML.

Следующее — мое исправление:

Просмотр корневого курса в android.support.v4.content.FileProvider$SimplePathStrategy.getUriForFile() :

Это означает, что mRoots должен содержать тег запрошенного URI. Поэтому я пишу код для печати mRoots и тега mRoots , а затем легко найти теги не совпадают.

Получается, что установка полномочий провайдера как $.provider — глупая идея ! Эти полномочия настолько распространены, что могут быть использованы другими провайдерами, что испортит конфигурацию пути!

Ответ 29

Вам нужно изменить файл xml file_paths.xml из

Ответ 30

Моя проблема была file_paths.xml Имя файла: я file_paths.xml в res/xml, в то время как для ресурса был задан файл provider_paths.xml в манифесте:

Я изменил provider_paths на file_paths и проблема решена.

Источник

Оцените статью