Как мы можем прикрепить несколько изображений по намерению в электронной почте Android

Я изо всех сил пытаюсь прикрепить более одного изображения, прежде чем отправлять его в gmail или другой почтовый клиент. Я хотел бы, чтобы каждая кнопка прикрепляла изображение, например, я хотел бы, чтобы пользователь прикреплял первую кнопку, копию удостоверения личности, затем другую кнопку, копию подтверждения оплаты (изображение).

Мой Java-код

 private void openFolder() {
    Intent intent = new Intent();
    intent.setType("image/*");
    intent.setAction(Intent.ACTION_GET_CONTENT);
    intent.putExtra("return-data", true);
    startActivityForResult(Intent.createChooser(intent, "Complete action using"), PICK_FROM_GALLERY);
}

private void openFolder2() {
    Intent intent = new Intent();
    intent.setType("image/*");
    intent.setAction(Intent.ACTION_GET_CONTENT);
    intent.putExtra("return-data", true);
    startActivityForResult(Intent.createChooser(intent, "Complete action using"), PICK_FROM_GALLERY2);
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == PICK_FROM_GALLERY && resultCode == RESULT_OK)
     {
         URI = data.getData();
         tvAttachment.setText(URI.getLastPathSegment());
         tvAttachment.setVisibility(View.INVISIBLE);

         URI2 = data.getData();
         tvAttachment2.setText(URI.getLastPathSegment());
         tvAttachment2.setVisibility(View.INVISIBLE);

    }
}

private void sendEmail() {
    try {
        String recipient = "[email protected]";
        subject = etSubject.getText().toString();
        message = "Full Name: " + Name.getText().toString() + "\n" + "Cellphone No: " + Number.getText().toString();
        final Intent emailIntent = new Intent(Intent.ACTION_SEND);
        emailIntent.setType("plain/text");
        emailIntent.putExtra(Intent.EXTRA_EMAIL, new String[]{recipient});
        emailIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, subject);
        if (URI != null) {
            emailIntent.putExtra(Intent.EXTRA_STREAM, URI);
        }
        emailIntent.putExtra(android.content.Intent.EXTRA_TEXT, message);
        this.startActivity(Intent.createChooser(emailIntent, "Sending email..."));
    } catch (Throwable t) {
        Toast.makeText(this, "Request failed, retry! " + t.toString(), Toast.LENGTH_LONG).show();
    }
}

Вам придется использовать ACTION_SEND_MULTIPLE, а не ACTION_SEND. Также обратите внимание, что plain/text не является допустимым типом MIME и не является типом MIME вашего изображения.

CommonsWare 20.03.2022 16:05

Я пытался использовать ACTION_SEND_MULTIPLE, но не понимаю, что подразумевается под действительным типом MIME для моего изображения.

Sindano 20.03.2022 16:35

Тип MIME, который вы указываете на Intent для ACTION_SEND и ACTION_SEND_MULTIPLE, должен быть типом MIME для контента в EXTRA_STREAM, если вы используете EXTRA_STREAM (что вы и делаете). Таким образом, вы должны использовать тип MIME, связанный с вашим изображением. Кроме того, FWIW, plain/text в любом случае не является допустимым типом MIME — обычный текст является text/plain.

CommonsWare 20.03.2022 17:56

Я пытался, но я все еще застрял

Sindano 20.03.2022 21:51
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
4
31
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Измените функцию sendEmail на следующую:

private void sendEmail() {
    try {
        String recipient = "[email protected]";
        subject = etSubject.getText().toString();
        message = "Full Name: " + Name.getText().toString() + "\n" + "Cellphone No: " + Number.getText().toString();
        final Intent emailIntent = new Intent(Intent.ACTION_SEND_MULTIPLE);
        emailIntent.setType("*/*");
        emailIntent.putExtra(Intent.EXTRA_EMAIL, new String[]{recipient});
        emailIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, subject);
        ArrayList<Uri> uris = new ArrayList<Uri>();
        uris.add(URI);
        uris.add(URI2);
        emailIntent.putExtra(Intent.EXTRA_STREAM, uris);
        emailIntent.putExtra(android.content.Intent.EXTRA_TEXT, message);
        this.startActivity(Intent.createChooser(emailIntent, "Sending email..."));
    } catch (Throwable t) {
        Toast.makeText(this, "Request failed, retry! " + t.toString(), Toast.LENGTH_LONG).show();
    }
}

Как заметил кто-то в комментариях, ваш тип MIME недействителен (обратен). Лучше всего использовать "*/*". Вам также необходимо использовать ACTION_SEND_MULTIPLE для действия Intent, так как вы присоединяете несколько Uris.

В приложении камеры/фотографий вам, возможно, придется долго щелкать, чтобы выбрать более одного изображения. Это зависит от устройства/производителя.

zen_of_kermit 21.03.2022 18:10

Большое спасибо, ваш метод мне помог. :-)

Sindano 21.03.2022 22:42

Другие вопросы по теме