Enviar un correo electrónico en Android seleccionando solo aplicaciones de correo electrónico Y especificando el tipo de archivo adjunto mime

En mi aplicación Android envío mensajes de correo electrónico con imágenes adjuntas.

Usando el sistema de Intención para enviarlo, puedo hacer una de las siguientes dos cosas:

1) Especifique el tipo como "message / rfc822" para que SOLAMENTE las aplicaciones de correo electrónico se muestren en el Chooser.

Inconvenience: No puedo especificar el tipo mime de la imagen que adjunto utilizando EXTRA_STREAM y un Uri. Muchos de los que reciben aplicaciones de correo electrónico (Gmail, Android, etc.) muestran esto como un "bloque" binaru desconocido adjunto al mensaje, no saben cómo obtener una vista previa y no saben cómo abrirlo como un archivo adjunto.

2) Especifique el tipo como (digamos) "image / png". La imagen se adjunta y los clientes de correo electrónico como Gmail pueden obtener una vista previa y abrir el archivo adjunto en la aplicación correspondiente.

Inconveniencia: para el usuario que envía, no puedo reducir la lista de aplicaciones que el usuario tiene que seleccionar en el Chooser a aplicaciones de correo electrónico, y MUCHAS aplicaciones se muestran en mi dispositivo Android, la mayoría de los cuales no son aplicaciones de correo electrónico y no lo que quiero.

¿Hay de todos modos para especificar su mensaje "/ rfc822" Intención Y para especificar el tipo MIME de los datos adjuntos a través de Uri en el Intent.EXTRA_STREAM?

BTW: Estoy proporcionando el archivo de mi propio ContentProvider y el método getType () (utilizado para determinar el tipo de archivo MIME) NO está siendo llamado. El método query () es pero no solicita el tipo de archivo, solo el nombre para mostrar y el tamaño del archivo.

Gracias

Cross-posting mi respuesta de la android-desarrollador Grupo de Google :

Si está dispuesto a lanzar su propio diálogo, podría:

Paso # 1: Cree el message/rfc822 Intent , como si fuera a enviar de esa manera, y usarlo con PackageManager y queryIntentActivities() para averiguar quién lo maneja.

Paso # 2: Crear la image/png Intent , como si fuera a enviar de esa manera, y utilizarlo con PackageManager y queryIntentActivities() para saber quién lo maneja.

Paso # 3: Calcule la intersección de estos dos conjuntos de actividades.

Paso # 4: Utilizarlos para rellenar un AlertDialog para que el usuario elija.

  • Paso # 4a: Si la intersección tiene una coincidencia, omita este paso.
  • Paso # 4b: Si la intersección tiene cero coincidencias, deje que el usuario sepa que no puede enviar el mensaje.

Paso 5: Modificar la image/png Intent de añadir el componente seleccionado en el diálogo, y llamar a startActivity() en él.

Al especificar el componente en el Intent , pasará a esa actividad en particular. Esto es efectivamente lo que hace el selector regular.

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.