#android #android-fileprovider #android-securityexception #android-11
#Android #android-fileprovider #android-securityexception #android-11
Вопрос:
Я получаю исключение ниже на устройстве Android 11, но могу без проблем отправлять эти файлы по электронной почте.
Java:Lang:SecurityException: Permission Denial:Reading androidx.core.content.FileProvider.uri content://com.example.myapp.fileprovider/external_files_files/images/default_image.jpg from pid= 10847, uid=1000 requires the provider be exported or granUriPermission.
Проблема возникает только для устройства Android 11, когда я делюсь несколькими файлами, в противном случае один файл работает нормально без каких-либо проблем, когда я использовал Intent.setdata = uri (единый объект uri).
Мой код:
Объявление файла манифеста :
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.myapp">
<application
...>
<provider
android:name="androidx.core.content.FileProvider"
android:authorities="com.example.myapp.fileprovider"
android:grantUriPermissions="true"
android:exported="false">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/filepaths" />
</provider>
...
</application>
</manifest>
Путь к файлу
<paths>
<external-files-path
name="images"
path="."/>
</paths>
Совместное использование кода.
ArrayList<Uri> Urilist = new ArrayList<String>();
// Adding multiple files as below.
File imagePath = new File(Context.getExternalFilesDir(null), "images");
File newFile = new File(imagePath, "default_image.jpg");
Uri contentUri = getUriForFile(getContext(), "com.example.myapp.fileprovider", newFile);
// Logic to add uri here
Intent shareIntent = new Intent();
shareIntent.setAction(Intent. ACTION_SEND_MULTIPLE);
shareIntent.putExtra(Intent.EXTRA_STREAM, Urilist);
shareIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
shareIntent.setType(*/*);
startActivity(Intent.createChooser(shareIntent, getResources().getText(R.string.share)));
Спасибо.
Комментарии:
1. Вы ничего не добавляете в свой список.
2. Я думаю, что для списка вы должны использовать что-то вроде putParcebleArrayList() .
3. @blackapps Спасибо за ваш ответ. Все файлы были отправлены по электронной почте, но я получаю исключение в logcat на телефоне Android 11. Я полагаю, что у нас есть поддержка файлового API.
4. Вы использовали putParcebleArrayList()?
Ответ №1:
Я исправил эту проблему, заменив нижеприведенную строку.
startActivity(намерение.createChooser(shareIntent, getResources().getText(R.string.share)));
с
startActivity (shareIntent);
Комментарии:
1. У меня такая же проблема, и это решение сработало. Похоже, что это проблема Intent.createChooser.