Android: FileProvider IllegalArgumentException Failed to find configured root that contains /data/data/**/files/Videos/final.mp4

前端 未结 3 1505
面向向阳花
面向向阳花 2020-12-15 15:26

I am trying to use FileProvider to play a video from private path.Facing

java.lang.IllegalArgumentException: Failed to find configured root          


        
相关标签:
3条回答
  • 2020-12-15 15:47

    You have your name and your path flipped. name is what goes in the Uri, and path is the relative location within the root on the filesystem.

    Go with:

    <paths>
        <files-path name="my_docs" path="Videos/" />
    </paths>
    
    0 讨论(0)
  • 2020-12-15 16:00

    change your provider XML to this.

    <?xml version="1.0" encoding="utf-8"?>
    <paths>
      <external-path name="external_files" path="." />
      <root-path name="external_files" path="/storage/" />
    </paths>
    
    0 讨论(0)
  • 2020-12-15 16:01

    I had the very same basic situation. I defined everything correctly (files-path in xml) but there is one more thing which leads to the same exception. I add another answer just as an addition and a comment would not be well readable.

    I created/read the directory where i store the files like:

    context.getDir("Documents", Context.MODE_PRIVATE) 
    

    This leads to a path like:

    /data/user/0/ch.myapp/app_Documents/6c3c70d5-af66-48ef-8dfc-f4341de4e1bd.docx

    Then i changed creating the directory to:

    File directory = new File(context.getFilesDir(), "Documents");
    if (!directory.exists()) {
      directory.mkdir();
    }
    

    This leads to a path like:

    /data/user/0/ch.myapp/files/Documents/6c3c70d5-af66-48ef-8dfc-f4341de4e1bd.docx

    According to the documentation Open a directory the two methods should be equivalent as far as i understand it. But it creates a different path... Maybe the formulation is just not clear for me in the documentation, but for me its wrongly written.

    getDir(name, mode)

    Creates a new directory (or opens an existing directory) within your app's unique file system directory. This new directory appears inside the directory provided by getFilesDir().

    0 讨论(0)
提交回复
热议问题