Я хочу установить часть своего приложения, которое позволяет пользователям посылать быстрое электронное письмо другому пользователю. Не очень трудно настроить это:
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 предстает как жизнеспособные альтернативы перед отправкой этого сообщения. Сообщение является совершенно слишком длинным для некоторых из них (особенно Твиттер).
Существует ли способ ограничить селектора просто приложениями, которые поддерживают длинные сообщения (такие как электронное письмо)? Или существует ли способ обнаружить приложение, что пользователь выбрал и корректирует сообщение соответственно?
Благодаря предложению Pentium10 о том, как работает Linkify, я нашел отличное решение этой проблемы. По сути, вы просто создаете ссылку «mailto:», а затем вызываете для этого соответствующее намерение. :
Intent intent = new Intent(Intent.ACTION_VIEW);
Uri data = Uri.parse("mailto:?subject=" + subject + "&body=" + body);
intent.setData(data);
startActivity(intent);
У этого решения есть несколько интересных аспектов:
Я использую действие ACTION_VIEW, потому что оно больше подходит для ссылку "mailto:". Вы можете не выполнять никаких действий, но тогда вы можете получить неудовлетворительные результаты (например, вас спросят, хотите ли вы добавить ссылку в свои контакты).
Поскольку это ссылка для «совместного использования», я просто не указываю адрес электронной почты, хотя это ссылка mailto. Оно работает.
Нет никакого избирателя. Причина в том, чтобы позволить пользователю воспользоваться настройками по умолчанию; если они установили почтовую программу по умолчанию, то они сразу перейдут к ней, полностью минуя средство выбора (что, на мой взгляд, хорошо, вы можете возразить иначе).
Конечно, я упускаю много тонкостей (например, правильное кодирование темы / тела), но вы должны суметь понять это самостоятельно.
Вы пытались включить 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..."));
Это может ограничить список доступных приложений-получателей ...