2010-12-14 2 views
7

Dans mon application Android, je suis en mesure de programmation ouvrir l'éditeur de messagerie par défaut avec A, Objet et message à l'aide de ce qui suit:Comment attendre que l'intention de courrier électronique se termine et obtienne un résultat?

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

Cela fonctionne très bien, mais je dois attendre dans mon application jusqu'à ce que le l'utilisateur termine avec l'écran d'e-mail et sait également si l'e-mail a été envoyé ou supprimé.

Quelqu'un sait-il comment faire?

+0

Vous devez utiliser 'emailIntent.setType (" message/rfc822 ");' ... Référence: [type de média Internet] (http://en.wikipedia.org/wiki/Internet_media_type#Type_message). –

Répondre

1

Cela va être difficile. Il n'y a pas de valeur de retour standardisée pour l'envoi d'e-mails et, en fonction des paramètres de l'utilisateur, le courrier peut être envoyé avec l'application Email, l'application Gmail ou l'une des nombreuses applications de messagerie tierces. Ils diffèrent probablement tous dans la façon dont ils gèrent la fin des courriels. En ce qui concerne votre question en général, vous pouvez utiliser startActivityForResult() pour démarrer une activité, puis continuer après la fin, avec une valeur de retour indiquant comment les choses se sont passées. Cependant, je suis certain que la plupart des applications de messagerie ne vous donneront pas un résultat correct ici.

Je suis tenté de vous dire que vous devrez peut-être gérer vous-même l'envoi de l'e-mail, c'est-à-dire écrire une fonction simple qui se connecte au SMTP et envoie l'e-mail. Je suis sûr qu'il y a beaucoup de bibliothèques qui s'occupent de tous les travaux de levage.

(Vous pouvez, bien sûr, d'expérimenter avec startActivityForResult première -. MAYBE des applications de messagerie les plus courantes vous donner une valeur de retour)

+1

Hmm, pensé à SMTP ou JavaMail, mais à la fin mon application n'est pas une application de messagerie. Le courrier est juste utilisé pour "dire à un ami" et j'aimerais que la vue soit automatiquement annulée si l'utilisateur l'a complétée. Fonctionnalité très mineure mais cela rendrait l'interface utilisateur plus fluide. – Nicholas

2

Normalement, on pourrait utiliser startActivityForResult() qui commence la deuxième activité en tant que sous -activité. Cependant, dans le cas de l'activité e-mail, cela ne semble pas fonctionner, probablement en raison de l'implémentation interne. Essayez avant les questions d'affichage:

how can we use startActivityforResult() for Email intent?

L'envoi d'un courrier électronique réel est asynchrone par la conception, de sorte que l'activité sera probablement de retour avant que le courriel soit envoyé. Je n'ai pas testé ce cas spécifiquement, mais à partir du lien ci-dessus, il semble que l'activité retourne une fois que l'utilisateur touche le bouton d'envoi. Si cela suffit pour votre cas d'utilisation puis super, si vous avez besoin de savoir si l'e-mail a été réellement envoyé, vous pourriez être SOL.

+0

Oui, comme EboMike a suggéré que vous pouvez contourner les clients de messagerie en utilisant JavaMail, qui semble fonctionner sur Android: http://stackoverflow.com/questions/2020088/sending-email-in-android-using-javamail-api-without- using-the-default-android-ap – jfelectron

+1

Je recherche toujours, naturellement, mais n'ai pas vu ce poste. Bon point de départ. Je ne m'inquiète pas vraiment si l'email a été envoyé, je m'intéresse seulement si l'utilisateur a appuyé sur Envoyer ou Supprimer. Je vais bricoler avec ça ... – Nicholas

Questions connexes