Как открыть программу Email через Намерения (но только почтовую программу)

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

Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType("text/plain");
intent.putExtra(Intent.EXTRA_SUBJECT, subject);
intent.putExtra(Intent.EXTRA_TEXT, message);
Intent mailer = Intent.createChooser(intent, null);
startActivity(mailer);

Однако проблема состоит в том, что ACTION_SEND принят больше, чем просто почтовыми программами - например, по моему телефону приложение Facebook, Твиттер, reddit является забавой, и даже Bluetooth предстает как жизнеспособные альтернативы перед отправкой этого сообщения. Сообщение является совершенно слишком длинным для некоторых из них (особенно Твиттер).

Существует ли способ ограничить селектора просто приложениями, которые поддерживают длинные сообщения (такие как электронное письмо)? Или существует ли способ обнаружить приложение, что пользователь выбрал и корректирует сообщение соответственно?

72
задан Dan Lew 22 July 2010 в 19:07
поделиться

2 ответа

Благодаря предложению Pentium10 о том, как работает Linkify, я нашел отличное решение этой проблемы. По сути, вы просто создаете ссылку «mailto:», а затем вызываете для этого соответствующее намерение. :

Intent intent = new Intent(Intent.ACTION_VIEW);
Uri data = Uri.parse("mailto:?subject=" + subject + "&body=" + body);
intent.setData(data);
startActivity(intent);

У этого решения есть несколько интересных аспектов:

  1. Я использую действие ACTION_VIEW, потому что оно больше подходит для ссылку "mailto:". Вы можете не выполнять никаких действий, но тогда вы можете получить неудовлетворительные результаты (например, вас спросят, хотите ли вы добавить ссылку в свои контакты).

  2. Поскольку это ссылка для «совместного использования», я просто не указываю адрес электронной почты, хотя это ссылка mailto. Оно работает.

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

Конечно, я упускаю много тонкостей (например, правильное кодирование темы / тела), но вы должны суметь понять это самостоятельно.

88
ответ дан 24 November 2019 в 12:30
поделиться

Вы пытались включить Intent.EXTRA_EMAIL дополнительный?

Intent mailer = new Intent(Intent.ACTION_SEND);
mailer.setType("text/plain");
mailer.putExtra(Intent.EXTRA_EMAIL, new String[]{"name@email.com"});
mailer.putExtra(Intent.EXTRA_SUBJECT, subject);
mailer.putExtra(Intent.EXTRA_TEXT, bodyText);
startActivity(Intent.createChooser(mailer, "Send email..."));

Это может ограничить список доступных приложений-получателей ...

4
ответ дан 24 November 2019 в 12:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: