共享内部文件提供:无法找到包含/data/data/com.myapp/app_profiles/profile_1/games/game_1.xml的配置的根

时间:2019-05-16 18:04:59

标签: java android android-fileprovider

我想通过/data/data/com.myapp/app_profiles/profile_1/games/game_1.xml共享文件ACTION_SEND

我已将其添加到清单中:

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

我的filepaths.xml

<paths>
    <files-path path="app_profiles/profile_1/games/" name="myGame" />
</paths>

该代码(在XYActivity类中)为:

AlertDialog.Builder builder = new AlertDialog.Builder(this);    
builder.setItems(items, new DialogInterface.OnClickListener() {
    public void onClick(DialogInterface dialog, int item) {
        ....
        File file = FileManager.getGameFile(gameID);
        Uri fileUri = FileProvider.getUriForFile(XYActivity.this,
                                "com.myapp.fileprovider", file);

我收到以下错误:

java.lang.IllegalArgumentException: Failed to find configured root that contains /data/data/com.myapp/app_profiles/profile_1/games/game_1.xml
    at android.support.v4.content.FileProvider$SimplePathStrategy.getUriForFile(FileProvider.java:739)
    ...

我已经检查了文件浏览器,该文件确实存在!

关于我知道的文件对象

file.getPath()         /data/user/0/com.myapp/app_profiles/profile_1/games/game_1.xml
file.getAbsolutePath() /data/user/0/com.myapp/app_profiles/profile_1/games/game_1.xml
file.getName()         game_1.xml
file.getParent()       /data/user/0/com.myapp/app_profiles/profile_1/games

对于filepaths.xml中的path,我尝试了不同甚至错误的值:

path="app_profiles/profile_1/gamXes/"  
path="app_profiles/profile_1/games/"  
path="app_profiles/profile_1/games"  
path="profile_1/games"  
path="games/"  
path="games"
path="."
path="../games/"

这不会改变任何事情。这表明它们全都错了,我只需要使用正确的值,但我不知道那是什么/为什么我的方法不起作用。

有几个类似的答案,它们对我不起作用

没有子目录:FileProvider error "Failed to find configured root that contains /data/data/sawbodeployer.entm.illinois.edu ..."
外部存储设备:File Provider: Failed to find configured root that containsjava.lang.IllegalArgumentException: Failed to find configured root that contains,还有更多

1 个答案:

答案 0 :(得分:1)

/data/data/com.myapp/app_profiles/profile_1/games/game_1.xml不是标准位置,并且FileProvider不支持它。 <files-path>用于getFilesDir(),它将映射到/data/data/com.myapp/files/,并且您的文件不在其中。

要么:

  • 将文件存储在更好的位置(例如,目录getFilesDir()之外),或者

  • 编写自己的ContentProvider,可以从所需位置提供文件