Совместное использование внутреннего файла дает: Не удалось найти настроенный корень, содержащий /data/data/com.myapp/app_profiles/profile_1/games/game_1.xml - PullRequest
1 голос
/ 16 мая 2019

Я хочу поделиться файлом /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

Для path в filepaths.xml Я пробовал разные, даже неправильные значения:

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 "Не удалось найти настроенный корень, содержащий /data/data/sawbodeployer.entm.illinois.edu ..."
externalхранилище: Файловый провайдер: не удалось найти настроенный корень, который содержит , java.lang.IllegalArgumentException: не удалось найти настроенный корень, который содержит , многие другие

1 Ответ

1 голос
/ 16 мая 2019

/data/data/com.myapp/app_profiles/profile_1/games/game_1.xml не является стандартным местоположением, а FileProvider не поддерживает его.<files-path> предназначено для getFilesDir(), что соответствует значению /data/data/com.myapp/files/, и ваш файл не находится там.

Либо:

  • Сохраните файлы влучшее место (например, каталог из getFilesDir()), или

  • Напишите свой собственный ContentProvider, который может обслуживать файлы из выбранного вами места

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...