Подтвердить что ты не робот

Какова цель использования 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()?

4b9b3361

Ответ 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));
            }

Таким образом, он будет использовать значение по умолчанию, если пользователь имеет значение по умолчанию, будет всплывающее окно "без приложения", если приложение отсутствует. Оба счастливы.