studio startactivity putextra intent desde boton activity abrir android android-intent

putextra - ¿Cuál es el propósito de usar Intent.createChooser() en StartActivity() al enviar correo electrónico en Android?



putextra android (5)

AFAIK, si usas Intent.createChooser , hay tres diferencias:

  1. Puede especificar el título del diálogo de selección para que sea más claro.

  2. El sistema siempre presentará el cuadro de diálogo de selección, incluso si el usuario ha elegido uno predeterminado.

  3. Si su intento creado por Intent.createChooser no coincide con ninguna actividad, el sistema seguirá presentando un diálogo con el título especificado y un mensaje de error. No application can perform this action . O para la intención normal, puede obtener un error de tiempo de ejecución de Android con: Caused by: android.content.ActivityNotFoundException: No Activity found to handle Intent

Cuando sea necesario enviar un correo electrónico en Android, invocaremos la aplicación de correo electrónico registrada utilizando Intent.ACTION_SEND como se muestra a continuación.

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

Mi duda es por qué necesitamos usar Intent.createChooser en startActivity en lugar de usar startActivty(i) . ¿Hay alguna razón específica para usar Intent.createChooser() ?


El selector permite al usuario elegir otra aplicación de correo que la predeterminada. Es muy útil si usa gmail normal (privat) y correo electrónico (relacionado con el trabajo) y desea elegir cuál tomar.

Siempre se debe utilizar ...


Si no utiliza createChooser() , el sistema seguirá presentando el cuadro de diálogo de selección, a menos que el usuario ya haya expresado su decisión sobre qué programa instalado utilizar para la tarea dada (o que haya retirado su decisión anterior).

Si utiliza createChooser() , el sistema siempre presentará el diálogo, incluso si ya existe una preferencia expresada.

Entonces, ambos son absolutamente correctos, usted tiene que decidir cuál usar en cualquier caso dado. Su millaje puede variar, pero básicamente, si ofrece un formato como un texto, una imagen, un video o similar para su visualización o edición, es probable que desee omitir createChooser() para que cualquier cosa que el usuario prefiera pueda comenzar de inmediato. Por otra parte, si desea compartir algo que espera que el usuario maneje con un programa instalado diferente (por ejemplo, enviar un correo electrónico, Facebook, chat, lo que sea) cada vez, probablemente desee utilizar createChooser() para Facilita a tu usuario la selección sobre la marcha.


Un mensaje antiguo, pero para otros que lo encuentren, puede configurar el tipo en el Intento para el tipo mime de correos electrónicos, que al menos lo limitará a las aplicaciones que pueden enviar ese tipo de mensaje apropiado:

Intent i = new Intent(Intent.ACTION_SEND); i.setType( "message/rfc822"); startActivity(Intent.createChooser(i, "Send mail..."));

Hace que el diálogo de selección sea mucho más limpio.


Yo personalmente uso:

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

Por lo tanto, utilizará el valor predeterminado si el usuario tiene el valor predeterminado, aparecerá la ventana emergente "no hay aplicación" si no hay aplicación. Ambos son felices.