Я пытаюсь связать кнопку с почтовым приложением. Не для отправки почты, а просто для открытия почтового ящика.
Должен ли я сделать это с Intent intent = new Intent(...)
?
Если да, то что должно быть между ( )
?
Я пытаюсь связать кнопку с почтовым приложением. Не для отправки почты, а просто для открытия почтового ящика.
Должен ли я сделать это с Intent intent = new Intent(...)
?
Если да, то что должно быть между ( )
?
Если цель состоит в том, чтобы открыть почтовое приложение по умолчанию для просмотра папки «Входящие», то ключевым моментом является добавление категории намерений и использование намерения 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
email
Activity откроется В вашем текущем стеке (т. е. в вашем приложении), что вызовет плохой пользовательский опыт. Чтобы открыть email
в новом окне, добавьте строку intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
перед его запуском.
- person Samuel T. Chou; 28.10.2020
Этот код работал для меня. Он открывает средство выбора со всеми почтовыми приложениями, зарегистрированными на устройстве, и прямо в папку «Входящие»:
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);
}
Есть предложения, как избежать сбоя, если почта по умолчанию на устройстве не настроена?
Да, можно открыть почтовый ящик Android по умолчанию.
Используйте этот код:
Intent intent = getPackageManager().getLaunchIntentForPackage("com.android.email");
startActivity(intent);
Этот код работает, вам нужно сначала настроить почту по умолчанию на Android-устройстве. Если вы уже настроили свою почту, она работает нормально. В противном случае он принудительно закрывается с помощью NullPointerException
.
Чтобы открыть новую задачу, используйте следующий код:
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_APP_EMAIL);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
Вы можете просто использовать приведенный ниже код, когда нет вложений:
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
К сожалению, это не выглядит многообещающе. Это уже спрашивали
Как запустить почтовый клиент прямо в папку "Входящие" посмотреть?
вы можете открыть почтовый клиент в режиме создания, но вы, кажется, уже знаете это.
Электронная почта с намерением = новое намерение (Intent.ACTION_MAIN);
email.addCategory(Intent.CATEGORY_APP_EMAIL); startActivity(электронная почта);
Для котлина:
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
Немного поздно, вот правильный рабочий код.
Intent intent = Intent.makeMainSelectorActivity(
Intent.ACTION_MAIN,
Intent.CATEGORY_APP_EMAIL
);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(Intent.createChooser(intent, "Email"));
Для получения дополнительной информации проверьте этот документ:
Вы можете открыть почтовый клиент 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);