Ответ 1
Изменение типа MIME - это ответ, это то, что я сделал в своем приложении, чтобы изменить то же поведение. Я использовал intent.setType("message/rfc822");
Я хочу настроить часть своего приложения, которое позволяет пользователям отправлять быстрое электронное письмо другому пользователю. Это не очень сложно настроить:
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, Twitter, reddit - это весело, и даже Bluetooth подходит как жизнеспособные альтернативы для отправки этого сообщения. Сообщение слишком велико для некоторых из них (особенно Twitter).
Есть ли способ ограничить выборщик только приложениями, поддерживающими длинные сообщения (например, электронная почта)? Или есть способ обнаружить приложение, которое пользователь выбрал, и соответствующим образом настроить сообщение?
Изменение типа MIME - это ответ, это то, что я сделал в своем приложении, чтобы изменить то же поведение. Я использовал intent.setType("message/rfc822");
Благодаря предложению 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:". Вы не можете дать никаких конкретных действий, но тогда вы можете получить некоторые неудовлетворительные результаты (например, он спросит вас, хотите ли вы добавить ссылку на свои контакты).
Поскольку это ссылка "share", я просто не указываю адрес электронной почты, даже если это ссылка mailto. Он работает.
Нет выбора. Причина этого заключается в том, чтобы позволить пользователю воспользоваться преимуществами по умолчанию; если они установили почтовую программу по умолчанию, тогда она будет их прям к этому, обойдя выборщика вообще (что, кажется, хорошо в моем сознании, вы можете возразить иначе).
Конечно, есть много утонченности, которую я упускаю (например, правильно кодируя тему/тело), но вы должны уметь это понять самостоятельно.
Это сработало для меня
Intent emailIntent = new Intent(android.content.Intent.ACTION_SEND);
emailIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
emailIntent.setType("vnd.android.cursor.item/email");
emailIntent.putExtra(android.content.Intent.EXTRA_EMAIL, new String[] {"[email protected]"});
emailIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, "My Email Subject");
emailIntent.putExtra(android.content.Intent.EXTRA_TEXT, "My email content");
startActivity(Intent.createChooser(emailIntent, "Send mail using..."));
Вы пробовали включить Intent.EXTRA_EMAIL
extra?
Intent mailer = new Intent(Intent.ACTION_SEND);
mailer.setType("text/plain");
mailer.putExtra(Intent.EXTRA_EMAIL, new String[]{"[email protected]"});
mailer.putExtra(Intent.EXTRA_SUBJECT, subject);
mailer.putExtra(Intent.EXTRA_TEXT, bodyText);
startActivity(Intent.createChooser(mailer, "Send email..."));
Это может ограничить список доступных приложений-получателей...
Это немного опечатка, так как вам нужно переключить свой тип mimetype:
intent.setType("plain/text"); //Instead of "text/plain"
Попробуйте изменить тип MIME с простого на сообщение
intent.setType("text/message");
попробуйте эту опцию:
Intent intentEmail = new Intent(Intent.ACTION_SEND);
intentEmail.setType("message/rfc822");
Это отлично сработало для меня. здесь вы не используете android.content.Intent.ACTION_SEND, но Intent.ACTION_VIEW
Intent testIntent = new Intent(Intent.ACTION_VIEW);
Uri data = Uri.parse("mailto:?subject=" + "blah blah subject" + "&body=" + "blah blah body" + "&to=" + "[email protected]");
testIntent.setData(data);
startActivity(testIntent);