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

Cuando necesitamos enviar un correo electrónico en Android invocaremos una aplicación de correo electrónico registrada usando Intent.ACTION_SEND como 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() ?

AFAIK, si utiliza Intent.createChooser , hay tres diferentes:

  1. Puede especificar el título del diálogo del selector para hacerlo más claro.

  2. El sistema siempre aparecerá en el cuadro de diálogo del selector, incluso el usuario ha elegido uno predeterminado.

  3. Si su intención creada por Intent.createChooser no coincide con ninguna actividad, el sistema seguirá apareciendo 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

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

Debe usarse siempre …

Way, pero para otros que se encuentran a través de él, puede establecer el tipo de la intención de la mime tipo de mensajes de correo electrónico, que por lo menos se limita a las aplicaciones que pueden enviar ese tipo de mensaje:

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

Hace que el diálogo del selector sea mucho más limpio.

Si no utiliza createChooser() , el sistema seguirá presentando el diálogo del selector a menos que el usuario ya haya expresado su decisión sobre el programa instalado para usar para la tarea dada (o retiró su decisión anterior).

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

Así pues, ambos son absolutamente correctos, usted tiene que decidir cuál utilizar en cualquier caso dado. Su kilometraje 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, probablemente quiera omitir createChooser() para que lo que el usuario prefiera pueda comenzar inmediatamente. Por otro lado, si quieres compartir algo que esperas que el usuario maneje con un programa instalado diferente (por ejemplo, enviar un correo electrónico, Facebook, chat, lo que sea) cada vez, probablemente querrá usar createChooser() para Hacer que sea fácil para su usuario para seleccionar sobre la marcha.

Yo uso personalmente:

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

Por lo que usará el valor predeterminado si el usuario tiene el valor predeterminado, aparecerá la ventana "sin aplicación" si no hay ninguna aplicación. Ambos son felices.

  • Tomar fotos y geotag
  • Android: cómo capturar la imagen sin mostrar la vista previa
  • Cómo pasar Extra a BroadcastReceiver, al iniciar ACTION_CALL
  • ¿Cuál es la diferencia entre getIntent () y obtener la intención de savedInstanceState?
  • La fuerza de la aplicación se cierra cuando google + no está instalado
  • Diferencia entre Intent.FLAG_ACTIVITY_CLEAR_TASK e Intent.FLAG_ACTIVITY_TASK_ON_HOME
  • La intención de Android de compartir datos de texto / datos sencillos en Google Drive
  • Aplicación para Android que sobrevive a la memoria limpia
  • Permitir que el usuario seleccione cámara o galería para la imagen
  • Android - Actividad del logotipo de la aplicación
  • La cámara no funciona / ahorra al usar Uri de caché como MediaStore.EXTRA_OUTPUT
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.