FileProvider – IllegalArgumentException: Konnte konfiguriertes Stammverzeichnis nicht finden

Lesezeit: 6 Minuten

FileProvider IllegalArgumentException Konnte konfiguriertes Stammverzeichnis nicht finden
Pivoman

Ich versuche, ein Bild mit der Kamera aufzunehmen, aber ich erhalte die folgende Fehlermeldung:

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>

Java:

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>

Ich habe den ganzen Tag nach diesem Fehler gesucht und versucht zu verstehen FileProvider, aber ich habe keine Ahnung, was diese Fehlermeldung mir zu sagen versucht. Wenn du mehr Infos/Code willst, schreib mir in den Kommentar.

  • Können Sie auch den Code der createImageFile-Methode einfügen?

    – Ankit Batra

    28. April 2017 um 23:03 Uhr

  • Es tut mir so leid, aber Ich habe dieses Projekt abgebrochen und arbeite nicht mehr daran. Ich werde die beliebteste Antwort akzeptieren, um diese Frage zu “schließen”. Vielen Dank an alle für die Teilnahme und ich hoffe, es hilft anderen.

    – Pivomann

    14. September 2017 um 12:26 Uhr

  • Bin auf das gleiche Problem gestoßen. Ich habe diese Lösung gefunden, um ein grundlegendes FileProvider-Setup mit einem minimalen Github-Beispielprojekt zum Laufen zu bringen: stackoverflow.com/a/48103567/2162226 . Es enthält Schritte, um festzulegen, welche Dateien (ohne Änderungen) in ein lokales eigenständiges Projekt zu kopieren sind

    – Gen Bo

    4. Januar 2018 um 21:36 Uhr

  • Dieses Problem ist jetzt in Delphi 10.4 behoben: quality.embarcadero.com/browse/RSP-26950

    – David Nottage

    27. Mai 2020 um 21:55 Uhr

FileProvider IllegalArgumentException Konnte konfiguriertes Stammverzeichnis nicht finden
Mitul Varmora

Dies kann alle Probleme lösen: Alle Tags werden hinzugefügt, sodass Sie sich keine Gedanken über den Ordnerpfad machen müssen. res/xml/file_paths.xml ersetzen durch:

<?xml version="1.0" encoding="utf-8"?>
<paths>
  <external-path
    name="external"
    path="." />
  <external-files-path
    name="external_files"
    path="." />
  <cache-path
    name="cache"
    path="." />
  <external-cache-path
    name="external_cache"
    path="." />
<files-path
    name="files"
    path="." />
</paths>

EDIT: 1. Juni 2021

Wir sollten nur einen bestimmten Pfad verwenden, den wir brauchen. Probieren Sie selbst einen alternativen Pfad aus und verwenden Sie den, den Sie benötigen.

Weitere Informationen finden Sie unter Akzeptierte Antwort: https://stackoverflow.com/a/42516202/4498813

  • Beste Lösung. Danke.

    – Pawan Pillai

    15. August 2019 um 21:20 Uhr

  • habe diese Lösung verwendet und der Code hat angefangen zu arbeiten. Unnötigen Code entfernt, indem getestet wurde, welcher davon funktionierte

    – Kartik

    8. November 2019 um 6:30 Uhr

  • Bruder, du hast meinen Tag gerettet. Vielen Dank 🙂

    – manjunath kalannavar

    10. Dezember 2019 um 18:23 Uhr

  • Ich liebe dich dafür

    – Asad Mehmod

    10. April 2020 um 12:45 Uhr

  • Toll. Mein Problem gelöst

    – kpk

    23. Dezember 2020 um 6:22 Uhr

  • Hat für mich funktioniert. Danke! Wie kamen Sie auf ‘.’ notation ?

    – Nacht Wut

    30. Dezember 2017 um 21:00 Uhr


  • @antygravity können Sie bitte eine Referenz / Dokumentation dieser Lösung bereitstellen?

    – Geekoraul

    6. März 2018 um 18:03 Uhr

  • Gibt es negative Folgen dieser Lösung?

    – RediOne1

    27. Juli 2018 um 11:53 Uhr


  • Hat bei mir funktioniert, vielen Dank.

    – Hiren

    7. Oktober 2018 um 9:22 Uhr


  • Dies sollte die akzeptierte Antwort sein! Die einzige Lösung, die funktioniert hat

    – Egorikem

    5. Juni 2019 um 16:18 Uhr

Ich bin sicher, dass ich zu spät zur Party komme, aber unten hat für mich funktioniert.

<paths>
    <root-path name="root" path="." />
</paths>

  • Dies war der letzte Schritt, um meinen Code auch zum Laufen zu bringen! Danke.

    – Hundedogma

    5. März 2020 um 2:54 Uhr

  • Genialeeee! Ich habe versucht, auf die zuzugreifen no_backup Ordner, aber ich konnte keine Möglichkeit finden, ihn in der FileProvider-XML-Datei verfügbar zu machen. Danke! Dadurch wurde mein Problem behoben!

    – 4gus71n

    21. Juli 2020 um 14:59 Uhr

  • Das war, was ich brauchte, um FileProvider den Zugriff auf die no_backup Mappe.

    – Clo Knibbe

    30. Oktober 2020 um 16:41 Uhr

  • Ich danke dir sehr!!!! Es funktionierte wie ein Zauber, nachdem nichts anderes funktioniert hat !!

    – DIVYA RATHOD

    4. Juni 2021 um 12:15 Uhr

  • Dies führte zu keinem Absturz. aber mein Bild wurde nicht angehängt.

    – Chitgoks

    31. Januar um 9:08 Uhr

1646352187 811 FileProvider IllegalArgumentException Konnte konfiguriertes Stammverzeichnis nicht finden
Unschuldig

Wenn Sie den internen Cache verwenden, verwenden Sie.

<paths xmlns:android="http://schemas.android.com/apk/res/android">
    <cache-path name="cache" path="https://stackoverflow.com/" />
</paths>

  • Dies war der letzte Schritt, um meinen Code auch zum Laufen zu bringen! Danke.

    – Hundedogma

    5. März 2020 um 2:54 Uhr

  • Genialeeee! Ich habe versucht, auf die zuzugreifen no_backup Ordner, aber ich konnte keine Möglichkeit finden, ihn in der FileProvider-XML-Datei verfügbar zu machen. Danke! Dadurch wurde mein Problem behoben!

    – 4gus71n

    21. Juli 2020 um 14:59 Uhr

  • Das war, was ich brauchte, um FileProvider den Zugriff auf die no_backup Mappe.

    – Clo Knibbe

    30. Oktober 2020 um 16:41 Uhr

  • Ich danke dir sehr!!!! Es funktionierte wie ein Zauber, nachdem nichts anderes funktioniert hat !!

    – DIVYA RATHOD

    4. Juni 2021 um 12:15 Uhr

  • Dies führte zu keinem Absturz. aber mein Bild wurde nicht angehängt.

    – Chitgoks

    31. Januar um 9:08 Uhr

1646352187 712 FileProvider IllegalArgumentException Konnte konfiguriertes Stammverzeichnis nicht finden
Diego Venâncio

Ich habe 2 Wochen verloren, als ich versucht habe, eine Lösung zu finden … Wenn Sie hier ankommen, versuchen Sie alles oben Genannte:

1 – Überprüfen Sie, ob sich Ihr Tag-Anbieter innerhalb der Tag-Anwendung befindet

<application>

    <provider android:name="android.support.v4.content.FileProvider" android:authorities="com.companyname.Pocidadao.fileprovider" android:exported="false" android:grantUriPermissions="true">
      <meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/file_paths"></meta-data>
    </provider>

</application>

2 – Wenn Sie viele Pfade erfolglos ausprobiert haben, testen Sie mit diesem:

<?xml version="1.0" encoding="utf-8"?>
<paths>
  <cache-path name="cache" path="." />
  <external-path name="external" path="." />

  <root-path name="root" path="." />
  <files-path name="my_images" path="https://stackoverflow.com/" />
  <files-path name="my_images" path="myfile/"/>
  <files-path name="files" path="." />

  <external-path name="external_files" path="." />
  <external-path name="images" path="Pictures" />
  <external-path name="my_images" path="." />
  <external-path name="my_images" path="Android/data/com.companyname.yourproject/files/Pictures" />
  <external-path name="my_images" path="Android/data/com.companyname.yourproject/files/Pictures/" />

  <external-files-path name="images" path="Pictures"/>
  <external-files-path name="camera_image" path="Pictures/"/>
  <external-files-path name="external_files" path="." />
  <external-files-path name="my_images" path="my_images" />

  <external-cache-path name="external_cache" path="." />

</paths>

Testen Sie dies, wenn die Kamera funktioniert, entfernen Sie einige Zeilen und fahren Sie mit dem Testen fort …

3 – Vergessen Sie nicht zu überprüfen, ob die Kamera in Ihrem Emulator aktiviert ist.

  • Danke, das hat bei mir funktioniert. Müssen andere Pfade entfernt werden?

    – CodeSlave

    3. September 2019 um 6:16 Uhr

928830cookie-checkFileProvider – IllegalArgumentException: Konnte konfiguriertes Stammverzeichnis nicht finden

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy