Как открыть почтовый ящик по умолчанию из кода Android?

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

Должен ли я сделать это с Intent intent = new Intent(...)?

Если да, то что должно быть между ( )?


person Sander Swart    schedule 11.11.2011    source источник


Ответы (11)


Если цель состоит в том, чтобы открыть почтовое приложение по умолчанию для просмотра папки «Входящие», то ключевым моментом является добавление категории намерений и использование намерения ACTION_MAIN следующим образом:

Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_APP_EMAIL);
getActivity().startActivity(intent);

https://developer.android.com/reference/android/content/Intent.html#CATEGORY_APP_EMAIL

person Ben Yee    schedule 23.07.2015
comment
простой способ запустить только приложение электронной почты .. Большое спасибо !! - person TUSHAR; 06.02.2017
comment
как бы я имитировал это в React Native? - person jasan; 18.06.2017
comment
@jasan - вам нужно будет создать пользовательский компонент, чтобы вызвать эту логику из земли js. - person Ben Yee; 20.06.2017
comment
дружеское напоминание: это приведет к тому, что email Activity откроется В вашем текущем стеке (т. е. в вашем приложении), что вызовет плохой пользовательский опыт. Чтобы открыть email в новом окне, добавьте строку intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) перед его запуском. - person Samuel T. Chou; 28.10.2020
comment
Ответ информативный и показывает усилия и исследования - person Emmanuel Njorodongo; 21.04.2021

Этот код работал для меня. Он открывает средство выбора со всеми почтовыми приложениями, зарегистрированными на устройстве, и прямо в папку «Входящие»:

Intent emailIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("mailto:"));
    PackageManager pm = getPackageManager();

    List<ResolveInfo> resInfo = pm.queryIntentActivities(emailIntent, 0);
    if (resInfo.size() > 0) {
        ResolveInfo ri = resInfo.get(0);
        // First create an intent with only the package name of the first registered email app
        // and build a picked based on it
        Intent intentChooser = pm.getLaunchIntentForPackage(ri.activityInfo.packageName);
        Intent openInChooser =
                Intent.createChooser(intentChooser,
                        getString(R.string.user_reg_email_client_chooser_title));

        // Then create a list of LabeledIntent for the rest of the registered email apps 
        List<LabeledIntent> intentList = new ArrayList<LabeledIntent>();
        for (int i = 1; i < resInfo.size(); i++) {
            // Extract the label and repackage it in a LabeledIntent
            ri = resInfo.get(i);
            String packageName = ri.activityInfo.packageName;
            Intent intent = pm.getLaunchIntentForPackage(packageName);
            intentList.add(new LabeledIntent(intent, packageName, ri.loadLabel(pm), ri.icon));
        }

        LabeledIntent[] extraIntents = intentList.toArray(new LabeledIntent[intentList.size()]);
        // Add the rest of the email apps to the picker selection
        openInChooser.putExtra(Intent.EXTRA_INITIAL_INTENTS, extraIntents);
        startActivity(openInChooser);
    }
person Larisa Hogas    schedule 28.01.2015
comment
Это вылетает, когда цель запуска не может быть разрешена — для этого нужна еще одна проверка! - person Hannes Struß; 25.05.2016
comment
Идеальный ответ, вы спасаете мой день. Приятного кодирования :) - person Pratik Mohanrao Gondil; 03.09.2018

Есть предложения, как избежать сбоя, если почта по умолчанию на устройстве не настроена?

Да, можно открыть почтовый ящик Android по умолчанию.
Используйте этот код:

Intent intent = getPackageManager().getLaunchIntentForPackage("com.android.email");
startActivity(intent);


Этот код работает, вам нужно сначала настроить почту по умолчанию на Android-устройстве. Если вы уже настроили свою почту, она работает нормально. В противном случае он принудительно закрывается с помощью NullPointerException.

person Mayur Bhola    schedule 29.11.2011
comment
шапки точно нужны? - person copolii; 12.01.2012
comment
вы знаете, что когда кто-то дает ответ, попытайтесь выяснить его правильное или неправильное переполнение стека вместо того, чтобы искать заглавные буквы или маленькие, если вы хотите получить такое удовольствие, попробуйте другие забавные сайты, а не этот сайт программирования - person Mayur Bhola; 12.01.2012
comment
Это НЕПРАВИЛЬНО: решение предполагает, что у пользователя есть приложение с пакетом com.android.email и что это почтовое приложение по умолчанию, которое они используют. Если у меня есть, например, почта K9, и я использую ее в качестве клиента по умолчанию, открытие стандартного почтового клиента мне бесполезно. Намерение не было посмеяться, есть такая штука, как интернет-этикет. Когда вы печатаете все заглавными буквами, это считается КРИЧИМ и грубым. Кроме того, это делает ваш текст неприятным и трудным для чтения. Есть причина, почему есть заглавные и строчные буквы. Правильно отформатированный текст намного читабельнее, чем ВСЕ ЗАГЛАВНЫЕ. - person copolii; 16.01.2012
comment
да, это хорошо, что вы нашли мою ошибку, и я не совсем понимаю этот вопрос и дает неправильный ответ, но вы должны написать этот комментарий в первый раз вместо того, чтобы написать, что шапки действительно необходимы? если вы знаете правильный ответ, пожалуйста, дайте мне .. потому что я знал только об этом ответе, как я дал выше, на тот же вопрос, например, как открыть почтовый ящик по умолчанию из кода Android? ..! - person Mayur Bhola; 17.01.2012
comment
Спасибо за ответ. Потому что ОТВЕТ имеет значение. - person MKJParekh; 04.04.2012

Чтобы открыть новую задачу, используйте следующий код:

Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_APP_EMAIL);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
person Faxriddin Abdullayev    schedule 29.06.2020

Вы можете просто использовать приведенный ниже код, когда нет вложений:

Intent i = new Intent(Intent.ACTION_SENDTO);
i.setData(Uri.parse("mailto:[email protected]")); 
i.putExtra(Intent.EXTRA_SUBJECT, "Feedback/Support");
startActivity(Intent.createChooser(emailIntent, "Send feedback"));

Для получения дополнительной информации я рекомендую посетить: https://developer.android.com/guide/components/intents-common.html#Email

person Monir Zzaman    schedule 04.04.2019

К сожалению, это не выглядит многообещающе. Это уже спрашивали

Как запустить почтовый клиент прямо в папку "Входящие" посмотреть?

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

person skynet    schedule 11.11.2011

Электронная почта с намерением = новое намерение (Intent.ACTION_MAIN);

email.addCategory(Intent.CATEGORY_APP_EMAIL); startActivity(электронная почта);

person sara    schedule 05.07.2019

Для котлина:

fun composeEmail(addresses: Array<String>, subject: String) {
    val intent = Intent(Intent.ACTION_SENDTO).apply {
        data = Uri.parse("mailto:") // only email apps should handle this
        putExtra(Intent.EXTRA_EMAIL, addresses)
        putExtra(Intent.EXTRA_SUBJECT, subject)
    }
    if (intent.resolveActivity(packageManager) != null) {
        startActivity(intent)
    }
}

Ссылка: https://developer.android.com/reference/android/content/Intent.html#CATEGORY_APP_EMAIL

person Jamil Hasnine Tamim    schedule 21.03.2021

Немного поздно, вот правильный рабочий код.

Intent intent = Intent.makeMainSelectorActivity(
Intent.ACTION_MAIN,
Intent.CATEGORY_APP_EMAIL
);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(Intent.createChooser(intent, "Email"));

Для получения дополнительной информации проверьте этот документ:

  1. CATEGORY_APP_EMAIL
  2. makeMainSelectorActivity
person Mohammad Imran    schedule 24.05.2021

Вы можете открыть почтовый клиент Android по умолчанию, используя это:

Intent emailIntent = new Intent(android.content.Intent.ACTION_SEND);
emailIntent.setType("text/plain");
emailIntent.setClassName("com.android.email", "com.android.email.activity.Welcome");
emailIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(emailIntent);
person Alysson Myller    schedule 29.10.2012
comment
это создает новое электронное письмо, первоначальный вопрос заключался в том, чтобы просто открыть приложение электронной почты по умолчанию. - person Ben Yee; 23.07.2015

person    schedule
comment
извините, не тот, но попробуйте использовать этот - person Alex Cooper; 12.11.2011
comment
Намерение mailClient = новое намерение (Intent.ACTION_VIEW); mailClient.setClassName(com.google.android.gm, com.google.android.gm.ConversationListActivity); startActivity(почтовый клиент); - person Alex Cooper; 12.11.2011
comment
Спасибо за ваш ответ. Я только что понял, что пытаюсь получить доступ к почтовому приложению HTC, а не к почтовому приложению по умолчанию. Есть ли способ открыть его в папке «Входящие»? или вы можете показать мне, где я могу найти эту информацию? - person Sander Swart; 13.11.2011
comment
как мне передать тему письма, а также значение TO? - person TharakaNirmana; 09.10.2013