Отказ в разрешении: исключение безопасности при совместном использовании файла с FileProvider Android 11 phone

#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.