43 Stimmen

Was ist der Zweck der Verwendung von Intent.createChooser() in StartActivity() beim Senden von E-Mails in Android

Wenn wir in Android eine E-Mail senden wollen, rufen wir die registrierte E-Mail-Anwendung mit Intent.ACTION_SEND wie folgt auf

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

Mein Zweifel ist, warum wir Intent.createChooser in startActivity verwenden müssen, anstatt mit startActivty(i) . Gibt es einen besonderen Grund für die Verwendung Intent.createChooser() ?

50voto

Euporie Punkte 1798

AFAIK, wenn Sie Intent.createChooser gibt es drei Unterschiede:

  1. Sie können den Titel des Auswahldialogs angeben, um ihn zu verdeutlichen.

  2. Das System zeigt den Auswahldialog immer an, auch wenn der Benutzer einen Standarddialog ausgewählt hat.

  3. Wenn Ihre Absicht durch Intent.createChooser nicht mit einer Aktivität übereinstimmt, zeigt das System dennoch ein Dialogfeld mit dem angegebenen Titel und einer Fehlermeldung an No application can perform this action . Oder für die normale Absicht, können Sie einen Android-Laufzeitfehler mit erhalten: Caused by: android.content.ActivityNotFoundException: No Activity found to handle Intent

12voto

WarrenFaith Punkte 56919

Mit dem Auswahlmenü kann der Benutzer eine andere E-Mail-Anwendung als die Standardanwendung auswählen. Es ist sehr nützlich, wenn Sie normales Google Mail (privat) und E-Mail (beruflich) verwenden und Sie wählen möchten, welche Sie nehmen möchten.

Sollte immer verwendet werden...

11voto

Michael Punkte 3651

Für andere, die auf diese Nachricht stoßen, können Sie den Typ der Absicht auf den Mime-Typ von E-Mails einstellen, wodurch sie zumindest auf Anwendungen beschränkt wird, die diese Art von Nachricht senden können:

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

Der Auswahldialog ist jetzt viel übersichtlicher.

6voto

Gábor Punkte 8379

Wenn Sie nicht createChooser() Das System zeigt den Auswahldialog nur dann an, wenn der Benutzer seine Entscheidung, welches installierte Programm er für die jeweilige Aufgabe verwenden möchte, bereits getroffen hat (oder wenn er seine vorherige Entscheidung zurückgezogen hat).

Wenn Sie Folgendes verwenden createChooser() wird das System den Dialog immer anzeigen, auch wenn bereits eine Präferenz angegeben wurde.

Beide sind also absolut richtig, man muss sich nur entscheiden, welche man im Einzelfall verwenden möchte. Grundsätzlich gilt aber: Wenn Sie ein Format wie einen Text, ein Bild, ein Video oder Ähnliches zur Anzeige oder Bearbeitung anbieten, sollten Sie wahrscheinlich die createChooser() so dass das, was der Benutzer bereits bevorzugt, sofort beginnen kann. Wenn Sie andererseits etwas freigeben wollen, von dem Sie erwarten, dass der Benutzer es jedes Mal mit einem anderen installierten Programm bearbeitet (z. B. eine E-Mail senden, Facebook, Chat, was auch immer), sollten Sie wahrscheinlich createChooser() um dem Benutzer die Auswahl zu erleichtern.

1voto

Kai Wang Punkte 3149

Ich persönlich benutze:

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

Es wird also die Standardeinstellung verwendet, wenn der Benutzer die Standardeinstellung hat, und es wird ein Fenster mit der Aufschrift "Keine App" angezeigt, wenn keine App vorhanden ist. Beide sind zufrieden.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X