Какова цель использования Intent.createChooser () в StartActivity () при отправке электронной почты в Android - PullRequest
26 голосов
/ 27 сентября 2010

Когда нам нужно отправить электронное письмо в Android, мы будем вызывать зарегистрированное почтовое приложение, используя Intent.ACTION_SEND, как показано ниже

Intent i = new Intent(Intent.ACTION_SEND);
startActivity(Intent.createChooser(i, "Send mail..."));

Я сомневаюсь, почему нам нужно использовать Intent.createChooser в startActivity, а не использовать startActivty(i). Есть ли какая-то конкретная причина использования Intent.createChooser()?

Ответы [ 5 ]

25 голосов
/ 02 сентября 2014

AFAIK, если вы используете Intent.createChooser, есть три различия:

  1. Вы можете указать заголовок диалогового окна выбора, чтобы сделать его более понятным.

  2. Система всегда будет отображать диалоговое окно выбора, даже если пользователь выбрал стандартное значение по умолчанию.

  3. Если ваше намерение, созданное Intent.createChooser, не соответствует какой-либо деятельности, система все равно будет отображать диалог с указанным заголовком и сообщением об ошибке No application can perform this action. Или для нормального намерения, вы можете получить ошибку времени выполнения Android с: Caused by: android.content.ActivityNotFoundException: No Activity found to handle Intent

10 голосов
/ 27 сентября 2010

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

Всегда следует использовать ...

8 голосов
/ 14 июля 2012

Старое сообщение, но для тех, кто сталкивается с ним, вы можете установить тип Intent для типа MIME, который по крайней мере ограничит его приложениями, которые могут отправлять соответствующий тип сообщения:

Intent i = new Intent(Intent.ACTION_SEND); 
i.setType( "message/rfc822");
startActivity(Intent.createChooser(i, "Send mail..."));

Делает диалог выбора намного чище.

5 голосов
/ 27 марта 2014

Если вы не используете createChooser(), система по-прежнему будет отображать диалоговое окно выбора, если пользователь уже не выразил свое решение относительно того, какую установленную программу использовать для данной задачи (или они отозвали свое предыдущее решение).

Если вы используете createChooser(), система всегда будет отображать диалоговое окно, даже если уже есть выраженное предпочтение.

Итак, оба абсолютно верны, вы должны решить, какой из них использовать в каждом конкретном случае. Ваш пробег может варьироваться, но в основном, если вы предлагаете формат, такой как текст, изображение, видео или аналогичный для отображения или редактирования, вы, вероятно, захотите пропустить createChooser(), чтобы все, что пользователь уже предпочитает, могло начаться немедленно. С другой стороны, если вы хотите поделиться чем-то, что, как вы ожидаете, пользователь будет обрабатывать с другой установленной программой (скажем, отправлять электронную почту, Facebook, общаться в чате и т. Д.) Каждый раз, вы, вероятно, захотите использовать createChooser() для упростите для пользователя выбор на лету.

1 голос
/ 04 апреля 2017

Я лично использую:

try {
    startActivity(i);
} catch (ActivityNotFoundException e) {
    startActivity(Intent.createChooser(i, null));
}

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...