2010-12-14 9 views
7

Nel mio app Android, sono in grado di aprire a livello di codice l'editor di e-mail predefinito con A, Oggetto e Messaggio utilizzando il seguente:Come aspettare la fine dell'email e ottenere risultati?

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); 

Questa grande opera, ma ho bisogno di aspettare nella mia app fino a quando il l'utente termina con la schermata di posta elettronica e sa anche se l'email è stata inviata o scartata.

Qualcuno sa come fare?

+0

È necessario utilizzare 'emailIntent.setType (" message/rfc822 ");' ... Riferimento: [Tipo di supporto Internet] (http://en.wikipedia.org/wiki/Internet_media_type#Type_message). –

risposta

1

Questo sarà difficile. Non esiste un valore di ritorno standardizzato per l'invio di e-mail e, a seconda delle impostazioni dell'utente, la posta può essere inviata con l'app Email, l'app Gmail o una delle tante app e-mail di terze parti. Molto probabilmente tutti si differenziano per il modo in cui gestiscono la fine delle e-mail.

Per quanto riguarda la domanda in generale, è possibile utilizzare startActivityForResult() per avviare un'attività e quindi continuare dopo averla terminata, con un valore di ritorno che indica come sono andate le cose. Tuttavia, sono abbastanza sicuro che la maggior parte delle app di posta elettronica non ti darà un risultato corretto qui.

Sono tentato di dire che potrebbe essere necessario gestire l'invio dell'e-mail da soli, ad esempio scrivere una semplice funzione che si connette allo SMTP e invia la posta. Sono sicuro che ci sono molte librerie là fuori che gestiscono tutto il sollevamento pesante.

(È possibile, naturalmente, sperimentare con startActivityForResult prime -. Forse l'app di posta elettronica più comuni si fa a dare un valore di ritorno)

+1

Hmm, pensato per SMTP o JavaMail, ma alla fine la mia app non è un'app di posta. Mail è appena usato per "dire ad un amico" e mi piacerebbe che la vista si chiudesse automaticamente se l'utente la completasse. Caratteristica molto minore ma renderebbe l'interfaccia più agevole. – Nicholas

2

Normalmente, si potrebbe usare startSubActivity() che inizia la seconda attività come un sub -attività. Tuttavia, nel caso delle attività e-mail questo non sembra funzionare, probabilmente a causa dell'implementazione interna. Prova a cercare prima che le domande della pubblicazione:

how can we use startActivityforResult() for Email intent?

L'attuale invio di una e-mail è asincrona in base alla progettazione, in modo da l'attività sarà probabilmente tornare prima l'e-mail venga effettivamente inviata. Non ho provato questo caso in modo specifico, ma dal collegamento sopra sembra che l'attività ritorni una volta che l'utente preme il pulsante di invio. Se questo è sufficiente per il tuo caso d'uso quindi super, se hai bisogno di sapere se l'email è stata effettivamente inviata potresti essere SOL.

+0

Sì, come suggerito da EboMike è possibile ignorare i client di posta elettronica utilizzando JavaMail, che sembra funzionare su Android: http://stackoverflow.com/questions/2020088/sending-email-in-android-using-javamail-api-with-- using-the-default-android-ap – jfelectron

+1

Cerco sempre, naturalmente, ma non ho visto quel post. Buon punto di partenza In realtà non mi interessa se l'email è stata inviata, mi interessa solo se l'utente ha premuto Invia o Elimina. Armeggiare con questo ... – Nicholas