2010-09-27 6 views
18

Cuando alguna vez tenemos que enviar un correo electrónico en Android vamos a invocar la aplicación de correo electrónico registrada usando Intent.ACTION_SEND, como a continuación¿Cuál es el propósito de utilizar Intent.createChooser() en startActivity() al enviar el correo electrónico en Android

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()?

Respuesta

10

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

recomendable utilizarlo siempre ...

+0

Pero junto con mailApplication, también aparece la aplicación de mensajería si solo tengo una aplicación de correo en mi dispositivo. Luego cómo restringirla a una sola aplicación, es decir solo la aplicación de correo que se lanzará en respuesta a la intención –

+2

@Android_programmer_camera: Please Permitir al usuario enviar lo que sea por el medio que desee. ¿Por qué siente que necesita limitar las opciones del usuario? – CommonsWare

+0

Oye, no te entendí. ¿Puedes explicarlo? –

8

Camino viejo mensaje, pero para otros que vienen a través de ella, se puede establecer el tipo de la Intención con el tipo MIME de mensajes de correo electrónico, que será al menos limitarlo a las aplicaciones que puede 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 del selector sea mucho más limpio.

4

Si no usa createChooser(), el sistema seguirá presentando el cuadro de diálogo del selector a menos que el usuario ya haya expresado su decisión sobre qué programa instalar para la tarea determinada (o han retirado su decisión anterior).

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

Por lo tanto, ambos son absolutamente correctos, usted tiene que decidir cuál usar en cada caso. Su millaje puede variar, pero básicamente, si ofrece un formato como un texto, una imagen, un video o similar para mostrar o editar, probablemente quiera omitir createChooser() para que lo que el usuario prefiera pueda comenzar inmediatamente. Por otro lado, 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, es probable que desee utilizar createChooser() para hacerlo fácil para su usuario seleccionar sobre la marcha.

15

yo sepa, si se utiliza Intent.createChooser, hay tres diferentes:

  1. puede especificar el título del diálogo selector para que sea más clara.

  2. El sistema siempre aparecerá el cuadro de diálogo del selector incluso si el usuario ha elegido uno por defecto.

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

+1

Esto es con respecto al 3er punto. ActivityNotFoundException solo se obtendrá cuando use la intención normal en lugar de Intent.createChooser. Esta es también otra ventaja de usar Intent.createChooser. Puedes cambiar el 3er punto según esto. –

+0

@RaghuRamiReddy Gracias, he editado mi publicación. – Euporie

-1

Yo personalmente uso:

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

por lo que usar por defecto si el usuario tiene por defecto, pop-up "no aplicación" ventana si no hay aplicación Ambos están felices.

Cuestiones relacionadas