Send an email in Android selecting only email apps AND specifying attachment mime type

瘦欲@ 提交于 2020-01-03 16:55:00

问题


In my Android App I send email messages with images attached.

Using the Intent system to send it, I can do one of the following two things:

1) Specify type as "message/rfc822" so that ONLY email applications are shown in the Chooser.

Inconvenience: I cannot specify the mime type of the image I attach using EXTRA_STREAM and a Uri. Many receiving email apps (Gmail, Android, etc) show this as an unknown binaru "blob" attached to the message, don't know how to preview it and don't know how to open it as an attachment.

2) Specify the type as (say) "image/png". The image is attached and email clients such as Gmail can preview it, and open the attachment in the appropriate application.

Inconvenience: For the sending user, I cannot reduce the list of apps the user has to select from in the Chooser to email apps, and MANY apps are shown in my Android device, most of which are not email apps and not what I want.

Is there anyway to specify its a "message/rfc822" email Intent AND to specify the MIME type of the data attached via Uri in the Intent.EXTRA_STREAM?

BTW: I am providing the file from my own ContentProvider and the getType() method (used to determine file MIME type) is NOT being called. The query() method is but doesn't request the file type, only display name and file size.

thanks


回答1:


Cross-posting my answer from the android-developer Google Group:

If you are willing to roll your own dialog, you could:

Step #1: Create the message/rfc822 Intent, as if you were going to send that way, and use it with PackageManager and queryIntentActivities() to find out who handles it.

Step #2: Create the image/png Intent, as if you were going to send that way, and use it with PackageManager and queryIntentActivities() to find out who handles it.

Step #3: Compute the intersection of those two sets of activities.

Step #4: Use those to populate an AlertDialog for the user to choose from.

  • Step #4a: If the intersection has one match, skip this step.
  • Step #4b: If the intersection has zero matches, let the user know you can't send the message.

Step #5: Modify the image/png Intent to add the component selected from the dialog, and call startActivity() on it.

By specifying the component in the Intent, it will go to that particular activity. This is effectively what the regular chooser does.



来源:https://stackoverflow.com/questions/5841417/send-an-email-in-android-selecting-only-email-apps-and-specifying-attachment-mim

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!