Как мы можем использовать startActivityforResult () для намерения электронной почты? - PullRequest
10 голосов
/ 23 сентября 2010

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

Спасибо всем

Ответы [ 3 ]

12 голосов
/ 23 сентября 2010

Вы не можете, это не часть API.Она возвращается после нажатия кнопки отправки, даже если она не отправлена

0 голосов
/ 19 апреля 2018

Нет API, как было предложено ранее. Но... есть обходной путь, хотя. Наилучшим способом было бы использовать startActivityForResult() вместо startActivity() для запуска электронной почты. Тогда ваш onActivityResult метод должен выглядеть так:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
   if (requestCode == YOUR_REQUEST_CODE){
    if (resultCode == RESULT_OK && data != null){
       //if data is not null, the user has clicked the send button
       //in his email application
     }

}

}

Помните, что если вы вызываете startActivityForResult() из фрагмента, всегда используйте контекст вашей активности, например context.startActivityForResult(), и метод onActivityResult должен быть переопределен в вашей активности хоста.

0 голосов
/ 17 декабря 2011

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

Я сделаю «нажмите Enter, чтобы продолжить» или что-нибудь еще, если потребуется.

В любом случае: сначала фрагмент из основного класса записывает отчет на SDCard, а затем вызывает действие, которое отправит электронную почту.

WriteReportToStorage();

Intent Emailreport = new Intent(bvsactivity.this, Emailreport.class);
startActivityForResult(Emailreport,emailreport_ran);

Далее, в классе emailreport мы делаем стандартный код отправки письма + вложения:

public class Emailreport extends Activity {

@Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

final Intent email = new Intent(android.content.Intent.ACTION_SEND);
        email.setType("text/html

");
            email.putExtra(android.content.Intent.EXTRA_SUBJECT, "subject");
            email.putExtra(android.content.Intent.EXTRA_TEXT, "body");
            email.putExtra(android.content.Intent.EXTRA_STREAM, Uri.parse("file:/" +      Environment.getExternalStorageDirectory() + "//Report.html"));
            startActivity(Intent.createChooser(email, "Email:"));
        }

Наконец, вернемся в ваш «основной» класс, результат onactivityresult, удаляющий файл SDCard:

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        // Actions based on which menu item we chose.
        if (requestCode == emailreport_ran) {boolean deleted = reportfile.delete(); emailreport_ran = 1;}
        }
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...