Предоставить разрешение на чтение нескольким файлам без начала намерения - PullRequest
1 голос
/ 08 января 2020

Я пишу приложение, которое экспортирует все мои картинки MMS в несколько подпапок загрузки, и у меня возникают проблемы с разрешениями. Мой код извлекает все мои сообщения (текст + изображения) и создает файл html с ними, следуя этому дереву:

My Download Folder/My App Name/Contact Name/

И в этой папке все фотографии + мой файл html.

Итак, пути к изображениям являются динамическими c, и я не могу определить все из них в моих provider_paths. xml.

Что я сделал:

По сути, в конце процесса генерации pi c мне нужно предоставить моему новому сгенерированному изображению разрешение на чтение, чтобы в дальнейшем открыть его на своей веб-странице. Сложность заключается в том, чтобы сохранить разрешение на чтение, даже если приложение уничтожено. Мне нужно видеть свою веб-страницу без моего приложения, очевидно, работающего над ней.

Я использую FileProvider для этого, и это то, что я пробовал до сих пор. Я явно запросил READ_EXTERNAL_STORAGE в своем Манифесте и сделал его предоставленным пользователем.

Мой Манифест:

<provider
            android:name="androidx.core.content.FileProvider"
            android:authorities="@string/file_provider_authority"
            android:exported="false"
            android:readPermission="true"
            android:writePermission="true"
            android:grantUriPermissions="true">
            <meta-data
                android:name="android.support.FILE_PROVIDER_PATHS"
                android:resource="@xml/provider_paths"/>
</provider>

Мои провайдеры_путь. xml:

<external-path path="Download/MyApp/" name="Download"/>

The код в конце процесса генерации pi c:

Uri uriForPic = FileProvider.getUriForFile(MainActivity.this,getString(R.string.file_provider_authority),imagefile);

intent.setDataAndType(uriForPic, "image/jpeg").addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_GRANT_READ_URI_PERMISSION);

Не работает. Поэтому я попробовал это:

Uri uriForPic = FileProvider.getUriForFile(MainActivity.this,getString(R.string.file_provider_authority),imagefile);

Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
Context context = MainActivity.this;

List<ResolveInfo> resInfoList = context.getPackageManager().queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY);
for (ResolveInfo resolveInfo : resInfoList) {
String packageName = resolveInfo.activityInfo.packageName;
context.grantUriPermission(packageName, uriForPic, Intent.FLAG_GRANT_WRITE_URI_PERMISSION | Intent.FLAG_GRANT_READ_URI_PERMISSION);
}

Все идет гладко, пока я не попытаюсь открыть свои html страницы с моими фотографиями в них. Затем я получил ошибку java.lang.SecurityException: Permission Denial. Это странно, так как я могу смотреть все свои фотографии, используя галерею без каких-либо исключений.

Я понимаю, что должен вручную предоставить разрешение для каждого из моих сгенерированных FileProvider Uris, но эти решения не работают, и после недели, пытаясь и погуглил, я потерялся и мне нужна твоя помощь ...

Итак, два вопроса. Предоставляет ли мой provider_paths. xml доступ к подпапкам? А чего не хватает в моем понимании разрешений?

Спасибо, что читаете меня,

...