共享内部文件给出:无法找到包含 /data/data/com.myapp/app_profiles/profile_1/games/game_1.xml 的已配置根目录

Sharing internal file gives: Failed to find configured root that contains /data/data/com.myapp/app_profiles/profile_1/games/game_1.xml

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

我已将此添加到清单中:

<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>

代码(在 class 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/"

它没有改变任何事情。这表明它们都是错误的,我只需要使用正确的值,但我不知道那是什么 be/why 我的不起作用。

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

没有子目录:
外部存储:, java.lang.IllegalArgumentException: Failed to find configured root that contains,更多

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

或者:

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

  • 编写您自己的 ContentProvider 可以从您想要的位置提供文件