Как дождаться завершения сообщения электронной почты и получить результат?

В моем приложении для Android я могу программно открыть редактор электронной почты по умолчанию с помощью «Кому», «Тема» и «Сообщение», используя следующее:

Intent emailIntent=new Intent(Intent.ACTION_SEND);
emailIntent.putExtra(Intent.EXTRA_EMAIL, toemail);
emailIntent.putExtra(Intent.EXTRA_SUBJECT, subject);
emailIntent.putExtra(Intent.EXTRA_TEXT, body);
emailIntent.setType("text/plain");
emailIntent.setClassName("com.android.email", "com.android.email.activity.MessageCompose");
startActivity(emailIntent);

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

Кто-нибудь знает, как это сделать?


person Nicholas    schedule 14.12.2010    source источник
comment
Вы должны использовать emailIntent.setType("message/rfc822");… Ссылка: тип интернет-медиа.   -  person Lincoln Hawk    schedule 09.07.2012


Ответы (2)


Обычно можно использовать startActivityForResult(), который запускает второе действие как поддействие. Однако в случае с электронной почтой это не работает, вероятно, из-за внутренней реализации. Попробуйте выполнить поиск, прежде чем задавать вопросы:

как мы можем использовать startActivityforResult() для отправки электронной почты?

Фактическая отправка электронной почты является асинхронной по замыслу, поэтому действие, скорее всего, вернется до того, как электронная почта будет фактически отправлена. Я специально не тестировал этот случай, но по приведенной выше ссылке кажется, что действие возвращается, когда пользователь нажимает кнопку отправки. Если этого достаточно для вашего варианта использования, тогда супер, если вам нужно знать, действительно ли электронное письмо было отправлено, вы можете быть SOL.

person jfelectron    schedule 14.12.2010
comment
Да, как предложил EboMike, вы можете обойти почтовые клиенты с помощью JavaMail, который работает на Android: stackoverflow.com/questions/2020088/ - person jfelectron; 14.12.2010
comment
Я всегда ищу, естественно, но не видел этот пост. Хорошая отправная точка. На самом деле мне все равно, было ли отправлено электронное письмо, меня интересует только то, нажал ли пользователь «Отправить» или «Отменить». Я возьмусь за это... - person Nicholas; 16.12.2010

Это будет непросто. Для отправки электронной почты не существует стандартного возвращаемого значения, и в зависимости от настроек пользователя почта может быть отправлена ​​с помощью приложения электронной почты, приложения Gmail или одного из многих сторонних почтовых приложений. Скорее всего, все они различаются тем, как они завершают электронные письма.

Что касается вашего вопроса в целом, вы можете использовать startActivityForResult() для запуска действия, а затем продолжить после его завершения с возвращаемым значением, указывающим, как все прошло. Тем не менее, я почти уверен, что большинство почтовых приложений не дадут вам должного результата.

У меня возникает соблазн сказать, что вам, возможно, придется самостоятельно обрабатывать отправку электронной почты, т. Е. Написать простую функцию, которая подключается к SMTP и отправляет почту. Я уверен, что есть много библиотек, которые справляются со всей тяжелой работой.

(Конечно, вы можете сначала поэкспериментировать с startActivityForResult — МОЖЕТ БЫТЬ, что наиболее распространенные почтовые приложения дают вам возвращаемое значение.)

person EboMike    schedule 14.12.2010
comment
Хм, думал о SMTP или JavaMail, но в конце концов мое приложение не является почтовым приложением. Почта используется только для того, чтобы сообщить другу, и я бы хотел, чтобы представление автоматически закрывалось, если пользователь завершает его. Очень незначительная функция, но она сделает пользовательский интерфейс более плавным. - person Nicholas; 16.12.2010