Поделиться файлом SharedPreferences на API 24+

197
11 июля 2017, 19:36

По пути data/data/com.app.app/shared_prefs/ находятся файлы, которые пользователь должен отправлять, например, в облако.

Такая запись:

Uri uri = Uri.fromFile(((File) it.next()));
share.putExtra(Intent.EXTRA_STREAM, uri);

на API 24+ не работает. Необходимо использовать:

Uri uri = FileProvider.getUriForFile(this, "com.app.app.provider", ((File) it.next()));

Вот только крашится с ошибкой:

Caused by: java.lang.IllegalArgumentException: Failed to find configured root that contains /data/data/com.app.app/shared_prefs/file.xml

Сделал всё как надо по туториалу из документации по провайдеру - https://developer.android.com/reference/android/support/v4/content/FileProvider.html. Но если верить этим подсказкам:

The root path of this subdirectory is the same as the value returned by getCacheDir().

Ни один из вариантов мне не подходит.

getFilesDir: /data/user/0/com.app.app/files
getCacheDir: /data/user/0/com.app.app/cache
getExternalStorageDirectory: /storage/emulated/0
getExternalFilesDir: /storage/emulated/0/Android/data/com.app.app/files
getExternalCacheDir: /storage/emulated/0/Android/data/com.app.app/cache

Т.к. мои файлы находятся в папке SharedPreferences. Есть ли вариант таки поделиться ими, кроме как копирования их в одну из папок выше и последующего удаления?

Манифест:

<provider
            android:name="android.support.v4.content.FileProvider"
            android:authorities="com.app.app.provider"
            android:exported="false"
            android:grantUriPermissions="true"
            tools:ignore="InnerclassSeparator">
            <meta-data
                android:name="android.support.FILE_PROVIDER_PATHS"
                android:resource="@xml/provider_paths"/>
        </provider>

provider_paths.xml. Пробовал всевозможные разные варианты, но безрезультатно. Сейчас там так:

<?xml version="1.0" encoding="utf-8"?>
<paths>
    <external-path path="data/data/com.app.app/shared_prefs/" name="shared_prefs" />
    <external-path path="." name="external_storage_root" />
</paths>
READ ALSO
как распарсить header в android java

как распарсить header в android java

есть вот такой стринг в котрый я поместил header String header = httpURLConnection2getHeaderFields()

323
Как создать обертку на java для python?

Как создать обертку на java для python?

Есть система на python, надо, чтобы она запускалась из-под JSPМне нужно написать обертку для этой системы, чтобы ее можно было собрать в java-приложение...

208
При загрузке apk в Google Play появляется ошибка

При загрузке apk в Google Play появляется ошибка

В чем может быть проблема? При тестировании на устройствах, приложение работает исправно, а как сгенерировал apk, так сразу появилась ошибка

201