Чтобы отправить несколько вложений, я использую этот код для создания почтового намерения:
private Intent buildIntent(FotoBatch fotos) {
Intent email = new Intent(Intent.ACTION_SEND_MULTIPLE);
email.addFlags(FLAG_GRANT_READ_URI_PERMISSION);
email.setType("message/rfc822");
email.putExtra(Intent.EXTRA_EMAIL, new String[]{MAIL_RECIPIENT});
...
// Attachments
ArrayList<Uri> uris = new ArrayList<>();
for (Foto foto : fotos.getFotos()) {
uris.add(foto.getUri());
}
email.putParcelableArrayListExtra(Intent.EXTRA_STREAM, uris);
return email;
}
При наличии нескольких вложений появляется следующее сообщение об ошибке
с GMail:
2018-10-16 12:07:19.703 4456-4456/? E/Gmail: Gmail:Error adding attachment
exk: SecurityException when openFileDescriptor.
at exl.a(SourceFile:8)
...
С K9 Mail:
Caused by: java.lang.SecurityException: Permission Denial: opening provider android.support.v4.content.FileProvider from ProcessRecord{a320841 7869:com.fsck.k9/u0a195} (pid=7869, uid=10195) that is not exported from UID 10196
at android.os.Parcel.readException(Parcel.java:1943)
Манифест содержит запись поставщика
<provider
android:name="android.support.v4.content.FileProvider"
android:authorities="com.timeshuttle.lagerapp.fileprovider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_paths" />
</provider>
Содержимое файла file_paths.xml:
<?xml version="1.0" encoding="utf-8"?>
<paths>
<external-path name="my_images" path="Android/data/com.timeshuttle.lagerapp/files/Pictures" />
</paths>
Чего не хватает в конфигурации провайдера контента?
Протестировано Android API Level 27 на устройстве Android 8.0.
Нет ошибки, если в списке Attachemnt содержится только один элемент.Почтовое приложение открывается и показывает вложение (изображение) правильно.