Я пишу приложение, которое экспортирует все мои картинки 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 доступ к подпапкам? А чего не хватает в моем понимании разрешений?
Спасибо, что читаете меня,