Какова цель использования Intent.createChooser() в StartActivity() при отправке электронной почты на Android
Когда нам нужно отправить электронное письмо на Android, мы будем вызывать зарегистрированное почтовое приложение с помощью Intent.ACTION_SEND, как показано ниже
Intent i = new Intent(Intent.ACTION_SEND);
startActivity(Intent.createChooser(i, "Send mail..."));
Я сомневаюсь, почему нам нужно использовать Intent.createChooser в startActivity, а не использовать
startActivty(i)
.
Есть ли какая-либо конкретная причина использования Intent.createChooser()
?
Ответы
Ответ 1
AFAIK, если вы используете Intent.createChooser
, существует три разных варианта:
-
Вы можете указать заголовок диалога выбора, чтобы сделать его более понятным.
-
Система всегда будет отображать диалог выбора, даже если пользователь выбрал по умолчанию.
-
Если ваше намерение, созданное Intent.createChooser
, не соответствует какой-либо деятельности, система все равно будет отображать диалог с указанным заголовком и сообщение об ошибке No application can perform this action
. Или для нормального намерения вы можете получить ошибку времени выполнения android: Caused by: android.content.ActivityNotFoundException: No Activity found to handle Intent
Ответ 2
Выборщик позволяет пользователю выбрать другое почтовое приложение, чем значение по умолчанию. Это очень полезно, если вы используете обычные gmail (privat) и электронную почту (связанные с работой), и вы хотите выбрать, какой из них выбрать.
Всегда следует использовать...
Ответ 3
В качестве старого сообщения, но для других, кто сталкивается с ним, вы можете установить тип в Intent для типа электронной почты mime, который, по крайней мере, ограничит его приложениями, которые могут отправить соответствующий тип сообщения:
Intent i = new Intent(Intent.ACTION_SEND);
i.setType( "message/rfc822");
startActivity(Intent.createChooser(i, "Send mail..."));
Делает диалог выбора более чистым.
Ответ 4
Если вы не используете createChooser()
, система все равно будет отображать диалог выбора, если пользователь уже не принял решение о том, какую установленную программу использовать для данной задачи (или они отозвали свое предыдущее решение).
Если вы используете createChooser()
, система всегда будет показывать диалог, даже если уже есть выраженное предпочтение.
Итак, оба абсолютно правильны, вам нужно решить, какой из них использовать в любом случае. Ваш пробег может отличаться, но в основном, если вы предлагаете формат, такой как текст, изображение, видео или подобное для отображения или редактирования, вы, вероятно, хотите опустить createChooser()
, чтобы все, что пользователь уже предпочитает, может начать немедленно. С другой стороны, если вы хотите поделиться тем, что вы ожидаете, что пользователь будет обрабатывать с помощью другой установленной программы (скажем, отправлять по электронной почте, Facebook, чату и т.д.) Каждый раз, вы, вероятно, захотите использовать createChooser()
для облегчите пользователю выбор на лету.
Ответ 5
Я лично использую:
try {
startActivity(i);
} catch (ActivityNotFoundException e){
startActivity(Intent.createChooser(i, null));
}
Таким образом, он будет использовать значение по умолчанию, если пользователь имеет значение по умолчанию, будет всплывающее окно "без приложения", если приложение отсутствует. Оба счастливы.