2010-12-14 5 views
7

In meinem Android-App, ich bin in der Lage, den Standard-E-Mail-Editor mit An, Betreff und Nachricht mit dem folgenden programmatisch zu öffnen:Wie warte ich auf E-Mail-Absicht zu beenden und Ergebnis zu erhalten?

Intent emailIntent=new Intent(Intent.ACTION_SEND); 
emailIntent.putExtra(Intent.EXTRA_EMAIL, toemail); 
emailIntent.putExtra(Intent.EXTRA_SUBJECT, subject); 
emailIntent.putExtra(Intent.EXTRA_TEXT, body); 
emailIntent.setType("text/plain"); 
emailIntent.setClassName("com.android.email", "com.android.email.activity.MessageCompose"); 
startActivity(emailIntent); 

Dies funktioniert gut, aber ich muß in meiner App warten, bis die Der Benutzer beendet den E-Mail-Bildschirm und weiß auch, ob die E-Mail gesendet oder verworfen wurde.

Wer weiß, wie man das macht?

+0

Sie sollten 'emailIntent.setType (" message/rfc822 ") verwenden;' ... Referenz: [Internet-Medientyp] (http://en.wikipedia.org/wiki/Internet_media_type#Type_message). –

Antwort

1

Das wird schwierig. Es gibt keinen standardisierten Rückgabewert für das Senden von E-Mails, und abhängig von den Benutzereinstellungen kann die E-Mail mit der E-Mail-App, der Google Mail-App oder einer der zahlreichen E-Mail-Apps von Drittanbietern gesendet werden. Sie unterscheiden sich höchstwahrscheinlich darin, wie sie die E-Mails beenden.

Wie für Ihre Frage im Allgemeinen können Sie startActivityForResult() verwenden, um eine Aktivität zu starten und dann weitermachen, nachdem es fertig ist, mit einem Rückgabewert, der angibt, wie die Dinge gingen. Ich bin mir jedoch ziemlich sicher, dass die meisten E-Mail-Apps hier kein korrektes Ergebnis liefern.

Ich bin versucht zu sagen, dass Sie möglicherweise das Senden der E-Mail selbst behandeln müssen, d. H. Eine einfache Funktion schreiben, die eine Verbindung zum SMTP herstellt und die E-Mail sendet. Ich bin mir sicher, dass es dort viele Bibliotheken gibt, die all die Schwertransporte abwickeln.

(Sie können natürlich, experimentieren mit startActivityForResult ersten -. MAYBE die häufigsten E-Mail-Anwendungen, die Sie geben einen Rückgabewert)

+1

Hmm, dachte über SMTP oder JavaMail nach, aber am Ende ist meine App keine Mail-App. Mail wird nur verwendet, um einem Freund zu sagen, und ich möchte, dass die Ansicht automatisch geschlossen wird, wenn der Benutzer sie vervollständigt. Sehr kleines Feature, aber es würde die Benutzeroberfläche flüssiger machen. – Nicholas

2

Normalerweise könnte man verwenden startActivityForResult(), die die zweite Tätigkeit als Unter beginnt -Aktivität. Im Falle der E-Mail-Aktivität scheint dies jedoch nicht zu funktionieren, wahrscheinlich aufgrund der internen Implementierung. Versuchen Sie vor der Veröffentlichung Fragen:

how can we use startActivityforResult() for Email intent?

Die tatsächliche eine E-Mail zu senden nach Design asynchron ist, so dass die Aktivität wahrscheinlich zurückkehren wird, bevor die E-Mail tatsächlich gesendet wird. Ich habe diesen Fall nicht speziell getestet, aber aus dem obigen Link scheint es, dass die Aktivität zurückkehrt, sobald der Benutzer den Senden-Knopf drückt. Wenn dies für Ihren Anwendungsfall ausreichend ist, dann können Sie, wenn Sie wissen möchten, ob die E-Mail tatsächlich gesendet wurde, SOL sein.

+0

Ja, wie EboMike vorgeschlagen hat, können Sie die E-Mail-Clients mithilfe von JavaMail umgehen, was unter Android funktioniert: http://stackoverflow.com/questions/2020088/sending-email-in-android-using-javamail-api-without- using-the-default-android-ap – jfelectron

+1

Ich suche immer, natürlich, aber habe diesen Beitrag nicht gesehen. Guter Ausgangspunkt. Es interessiert mich eigentlich nicht, ob die E-Mail gesendet wurde, ich bin nur daran interessiert, ob der Benutzer Send oder Discard gedrückt hat. Ich werde daran basteln ... – Nicholas

Verwandte Themen