2010-09-27 2 views
18

Wann immer wir eine E-Mail in Android senden müssen wir wie Was ist der Zweck der Verwendung Intent.createChooser() in StartActivity(), während E-Mail in Android Senden

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

mit Intent.ACTION_SEND registrierte E-Mail-Anwendung aufrufen

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

Antwort

10

Die Auswahlfunktion ermöglicht es dem Benutzer, eine andere E-Mail-Anwendung als die Standardanwendung auszuwählen. Es ist sehr nützlich, wenn Sie normale Gmail (privat) und E-Mail (arbeitsbezogen) verwenden und Sie wählen möchten, welche zu nehmen.

sollte immer verwendet wird ...

+0

Aber zusammen mit mailApplication, Messaging-Anwendung wird auch angezeigt, wenn ich nur eine E-Mail-Anwendung in meinem Gerät haben. Dann wie auf nur eine Anwendung zu beschränken, dh nur Mail-Anwendung als Reaktion auf die Absicht gestartet werden –

+2

@Android_Programmer_camera: Bitte erlauben Sie dem Benutzer, zu senden, was auch immer es ist, mit welchen Mitteln sie wünschen. Warum glauben Sie, dass Sie die Optionen des Benutzers einschränken müssen? – CommonsWare

+0

Hey, ich habe dich nicht verstanden. Kannst du es erklären? –

8

Way alte Nachricht, aber für andere, die über sie kommen, können Sie den Typen auf dem Intent zum MIME-Typ von E-Mail festgelegt, die es zumindest auf Anwendungen begrenzen, dass kann den entsprechenden Nachrichtentyp senden:

Macht den Auswahldialog viel sauberer.

4

Wenn Sie createChooser() nicht verwenden, zeigt das System weiterhin den Auswahldialog an, es sei denn, der Benutzer hat bereits entschieden, welches installierte Programm für die jeweilige Aufgabe verwendet wird (oder die vorherige Entscheidung wurde zurückgezogen).

Wenn Sie createChooser() verwenden, wird das System immer den Dialog anzeigen, auch wenn es bereits eine ausdrückliche Präferenz gibt.

Also beide sind absolut richtig, Sie müssen sich entscheiden, welche Sie in jedem Fall verwenden. Ihre Laufleistung kann variieren, aber wenn Sie ein Format wie einen Text, ein Bild, ein Video o.ä. zur Anzeige oder Bearbeitung anbieten, möchten Sie wahrscheinlich createChooser() weglassen, so dass alles, was der Benutzer bereits bevorzugt, sofort starten kann. Auf der anderen Seite, wenn Sie etwas teilen möchten, das der Benutzer mit einem anderen installierten Programm (sagen wir, senden Sie eine E-Mail, Facebook, Chat, was auch immer) jedes Mal, möchten Sie wahrscheinlich createChooser() verwenden, um es zu machen einfach für Ihren Benutzer, um im laufenden Betrieb auszuwählen.

15

AFAIK, wenn Sie Intent.createChooser verwenden, gibt es drei verschiedene:

  1. Sie den Titel des Auswahldialog es deutlich zu machen, angeben.

  2. Das System wird immer den Auswahldialog erscheinen, auch wenn der Benutzer einen Standard gewählt hat.

  3. Wenn Ihre von Intent.createChooser erstellte Absicht keiner Aktivität entspricht, wird weiterhin ein Dialogfeld mit dem angegebenen Titel und einer Fehlernachricht No application can perform this action angezeigt. Oder für die normale Absicht, können Sie ein Android-Laufzeitfehler mit: Caused by: android.content.ActivityNotFoundException: No Activity found to handle Intent

+1

Dies ist in Bezug auf den 3. Punkt. ActivityNotFoundException wird nur angezeigt, wenn Sie anstelle von Intent.createChooser die normale Absicht verwenden. Dies ist auch ein weiterer Vorteil der Verwendung von Intent.createChooser. Sie können den 3. Punkt entsprechend ändern. –

+0

@RaghuRamiReddy Danke, ich habe meine Post bearbeiten. – Euporie

-1

Ich persönlich benutze:

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

So wird es standardmäßig verwenden, wenn der Benutzer standardmäßig hat, wird Popup „keine app“ Fenster, wenn keine App. Beide sind glücklich.

Verwandte Themen