Не удалось найти рабочее решение с Intent.ACTION_SEND_MULTIPLE для нескольких изображений, которые будут прикреплены к электронному письму. - PullRequest
0 голосов
/ 16 января 2020

Итак, вот ситуация - я разрабатываю плагин Unreal с нативными android функциями. Намерение для одного изображения работает отлично, но теперь, когда я пытаюсь добавить несколько вложений изображений, используя ACTION_SEND_MULTIPLE, это не запускает активность.

Нет ошибок, выполнение останавливается на .startActivity(), перенос с помощью try-catch не возвращает никаких исключений, Unreal передает массив изображений без каких-либо проблем. Я чувствую, что это неправильно строит намерение, но после 2 дней поиска и бесчисленных часов проб и ошибок я чувствую, что пришло время сдаться и искать совет здесь:)

Вот часть java код, который я подозреваю, не работает:

public static void sendEMail(Activity activity, String subject, String[] extraImagePaths,
                         String[] recipients, String[] cc, String[] bcc,
                         boolean withChooser, String chooserTitle) {
    Intent intent = createEMailIntent(subject, recipients, cc, bcc);
    ArrayList<Uri> paths = new ArrayList<Uri>();

    if (extraImagePaths.length > 0) {
        for (String extraImagePath : extraImagePaths) {
            File fileIn = new File(extraImagePath);
            Uri arrayPath = Uri.fromFile(fileIn);
            paths.add(arrayPath);
        }
    }

    intent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, paths);

    try {
        launchShareIntent(activity, withChooser, chooserTitle, intent);
    } catch (Exception e) {
        Log.d("AndroidLOG:", e.getMessage());
    }
}

private static Intent createEMailIntent(String subject, String[] recipients, String[] cc, String[] bcc) {

    return new Intent(Intent.ACTION_SEND_MULTIPLE)
    .setData(Uri.parse("mailto:"))
    .setType("image/*")
    .putExtra(Intent.EXTRA_SUBJECT, subject)
    .putExtra(Intent.EXTRA_EMAIL, recipients)
    .putExtra(Intent.EXTRA_CC, cc)
    .putExtra(Intent.EXTRA_BCC, bcc);
}

private static void launchShareIntent(Activity activity, boolean withChooser, String chooserTitle, Intent intent) {
    if (withChooser) {
        Intent chooserIntent = Intent.createChooser(intent, chooserTitle);
        activity.startActivity(chooserIntent);
    } else {
        activity.startActivity(intent);
    }
}

попытался удалить все дополнения, кроме изображений, но это не решило проблему.

Помощь будет принята с благодарностью !

1 Ответ

0 голосов
/ 16 января 2020

После еще копания через SO нашел похожий пост, изменил .fromFile() на FileProvider и все заработало как шарм.

Фрагмент:

for (String extraImagePath : extraImagePaths) {
            Uri arrayPath = FileProvider.getUriForFile(activity, getAuthority(activity), new File(extraImagePath));
            paths.add(arrayPath);
        }

PS Кредит идет на CommonsWare !

...