web-dev-qa-db-fra.com

Quel est le but d'utiliser Intent.createChooser () dans StartActivity () lors de l'envoi d'un e-mail dans Android

Chaque fois que nous devons envoyer un e-mail en Android nous invoquerons une application de messagerie enregistrée en utilisant Intent.ACTION_SEND comme ci-dessous

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

Mon doute est pourquoi devons-nous utiliser Intent.createChooser dans startActivity plutôt que d'utiliser startActivty(i). Y a-t-il une raison particulière d'utiliser Intent.createChooser()?

28

AFAIK, si vous utilisez Intent.createChooser, il y a trois différences:

  1. Vous pouvez spécifier le titre de la boîte de dialogue du sélecteur pour le rendre plus clair.

  2. Le système présentera toujours la boîte de dialogue du sélecteur même si l'utilisateur en a choisi une par défaut.

  3. Si votre intention créée par Intent.createChooser ne correspond à aucune activité, le système présentera toujours une boîte de dialogue avec le titre spécifié et un message d'erreur No application can perform this action. Ou, dans l'intention normale, vous pouvez obtenir une erreur d'exécution Android avec: Caused by: Android.content.ActivityNotFoundException: No Activity found to handle Intent

26
Euporie

Le sélecteur permet à l'utilisateur de choisir une autre application de messagerie que celle par défaut. Son très utile si vous utilisez le gmail normal (privat) et le courrier électronique (lié au travail) et que vous souhaitez choisir celui à prendre.

Doit toujours être utilisé ...

10
WarrenFaith

Très ancien message, mais pour ceux qui le rencontrent, vous pouvez définir le type de l'intention sur le type d'e-mails mime, ce qui le limitera au moins aux applications qui peuvent envoyer ce type de message approprié:

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

Rend la boîte de dialogue du sélecteur beaucoup plus propre.

8
Michael

Si vous n'utilisez pas createChooser(), le système présentera toujours la boîte de dialogue de sélection à moins que l'utilisateur n'ait déjà exprimé sa décision quant au programme installé à utiliser pour la tâche donnée (ou qu'il ait retiré sa décision précédente).

Si vous utilisez createChooser(), le système présentera toujours la boîte de dialogue, même s'il existe déjà une préférence exprimée.

Donc, les deux sont absolument corrects, vous devez décider lequel utiliser dans un cas donné. Votre kilométrage peut varier, mais en gros, si vous proposez un format comme un texte, une image, une vidéo ou similaire pour l'affichage ou l'édition, vous voudrez probablement omettre createChooser() afin que tout ce que l'utilisateur préfère déjà puisse commencer immédiatement. D'un autre côté, si vous souhaitez partager quelque chose que vous attendez de l'utilisateur qu'il gère avec un programme installé différent (par exemple, envoyer un e-mail, Facebook, discuter, peu importe) à chaque fois, vous voudrez probablement utiliser createChooser() pour faciliter la sélection à la volée de votre utilisateur.

5
Gábor

J'utilise personnellement:

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

Il utilisera donc la valeur par défaut si l'utilisateur a la valeur par défaut, fera apparaître la fenêtre "aucune application" si aucune application. Les deux sont heureux.

1
Kai Wang