2010-12-14 5 views
7

En mi aplicación para Android, soy capaz de abrir mediante programación el editor de correo electrónico predeterminado con el Para, Asunto y Mensaje utilizando la siguiente:¿Cómo esperar a que el correo electrónico intente terminar y obtener un resultado?

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

Esto funciona muy bien, pero tengo que esperar en mi aplicación hasta que el el usuario finaliza con la pantalla de correo electrónico y también sabe si el correo electrónico se envió o se descartó.

¿Alguien sabe cómo hacer esto?

+0

Debe usar 'emailIntent.setType (" message/rfc822 ");' ... Referencia: [Tipo de medios de Internet] (http://en.wikipedia.org/wiki/Internet_media_type#Type_message). –

Respuesta

1

Esto va a ser complicado. No existe un valor de retorno estandarizado para el envío de correo electrónico, y dependiendo de la configuración del usuario, el correo podría enviarse con la aplicación de correo electrónico, la aplicación Gmail o una de las muchas aplicaciones de correo electrónico de terceros. Lo más probable es que todos difieran en cómo manejan la terminación de los correos electrónicos.

En cuanto a su pregunta en general, puede usar startActivityForResult() para comenzar una actividad y continuar luego de que termine, con un valor de retorno que indica cómo fueron las cosas. Sin embargo, estoy bastante seguro de que la mayoría de las aplicaciones de correo electrónico no le darán un buen resultado aquí.

Tengo la tentación de decir que puede necesitar manejar el envío del correo electrónico usted mismo, es decir, escribir una función simple que se conecte al SMTP y envíe el correo. Estoy seguro de que hay muchas bibliotecas que manejan todo el trabajo pesado.

(Puede, por supuesto, experimentar con startActivityForResult primeros -. Tal vez el aplicaciones de correo electrónico más comunes es lo que dará un valor de retorno)

+1

Hmm, pensé en SMTP o JavaMail, pero al final mi aplicación no es una aplicación de correo. El correo solo se usa para "contarle a un amigo" y me gustaría que la vista se cierre automáticamente si el usuario lo completa. Característica muy pequeña pero que haría que la interfaz de usuario sea más suave. – Nicholas

2

Normalmente, se podría utilizar startActivityForResult() que se inicia la segunda actividad como un sub -actividad. Sin embargo, en el caso de la actividad de correo electrónico, esto no parece funcionar, probablemente debido a la implementación interna. Prueba a buscar antes de publicar preguntas:

how can we use startActivityforResult() for Email intent?

El actual envío de un correo electrónico es asincrónico por diseño, por lo que la actividad es probable que volver antes de que el correo electrónico sea enviado. No he probado este caso específicamente, pero desde el enlace anterior parece que la actividad vuelve una vez que el usuario presiona el botón de enviar. Si esto es suficiente para su caso de uso, entonces súper, si necesita saber si realmente se envió el correo electrónico, es posible que sea SOL.

+0

Sí, como EboMike sugirió que puede omitir los clientes de correo electrónico utilizando JavaMail, que parece funcionar en Android: http://stackoverflow.com/questions/2020088/sending-email-in-android-using-javamail-api-without- using-the-default-android-ap – jfelectron

+1

Siempre busco, naturalmente, pero no vi esa publicación. Buen punto de partida. En realidad, no me importa si se envió el correo electrónico, solo me interesa saber si el usuario presionó Enviar o Descartar. Voy a jugar con esto ... – Nicholas

Cuestiones relacionadas