共享内部文件给出:无法找到包含 /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
可以从您想要的位置提供文件
我想通过 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 我的不起作用。
有几个类似的答案,但它们对我不起作用
没有子目录:
外部存储:
/data/data/com.myapp/app_profiles/profile_1/games/game_1.xml
不是标准位置,FileProvider
不支持。 <files-path>
用于 getFilesDir()
,它将映射到 /data/data/com.myapp/files/
,而您的文件不在其中。
或者:
将文件存储在更好的位置(例如,
getFilesDir()
之外的目录),或编写您自己的
ContentProvider
可以从您想要的位置提供文件