Отправьте электронное письмо в Android, выбрав только почтовые приложения И указав тип mime вложения - PullRequest
4 голосов
/ 30 апреля 2011

В моем приложении для Android я отправляю электронные письма с прикрепленными изображениями.

Используя систему Intent для отправки, я могу сделать одну из следующих двух вещей:

1) Укажите тип как «message / rfc822», чтобы в Chooser отображались ТОЛЬКО почтовые приложения.

Неудобство. Я не могу указать тип mime для изображения, которое я прикрепляю, используя EXTRA_STREAM и Uri. Многие принимающие почтовые приложения (Gmail, Android и т. Д.) Показывают это как неизвестный двоичный файл «blob», прикрепленный к сообщению, не знают, как его предварительно просмотреть, и не знают, как открыть его как вложение.

2) Укажите тип как (скажем) "image / png". Изображение прикреплено, и почтовые клиенты, такие как Gmail, могут предварительно просмотреть его и открыть вложение в соответствующем приложении.

Неудобство: для отправляющего пользователя я не могу сократить список приложений, из которых пользователь должен выбирать в Chooser, чтобы отправлять приложения по электронной почте, и МНОГИЕ приложения отображаются на моем устройстве Android, большинство из которых не являются приложениями электронной почты, а не какими Я хочу.

Можно ли в любом случае указать свой адрес электронной почты "message / rfc822" И указать тип MIME данных, прикрепленных через Uri в Intent.EXTRA_STREAM?

Кстати: я предоставляю файл из моего собственного ContentProvider, и метод getType () (используемый для определения типа MIME файла) НЕ вызывается. Метод query (), но не запрашивает тип файла, только отображаемое имя и размер файла.

спасибо

1 Ответ

3 голосов
/ 30 апреля 2011

Перекрестная публикация моего ответа от Android-разработчика Google Group :

Если вы хотите развернуть свой собственный диалог, вы можете:

Шаг # 1: Создайте message/rfc822 Intent, как если бы вы собирались пошлите этот путь и используйте его с PackageManager и queryIntentActivities() чтобы узнать, кто с этим справится.

Шаг # 2: Создайте image/png Intent, как если бы вы собирались отправить таким образом, и используйте его с PackageManager и queryIntentActivities() чтобы выяснить, кто с этим справится.

Шаг № 3: Вычислить пересечение этих двух наборов действий.

Шаг # 4: Используйте их, чтобы заполнить AlertDialog, чтобы пользователь мог выбрать.

  • Шаг # 4а: Если на пересечении есть одно совпадение, пропустите этот шаг.
  • Шаг # 4b: Если пересечение имеет ноль совпадений, сообщите пользователю об этом. Вы не можете отправить сообщение.

Шаг № 5: Измените image/png Intent, чтобы добавить выбранный компонент из диалогового окна и вызовите startActivity() на нем.

Указав компонент в Intent, он перейдет к конкретная деятельность. Это эффективно то, что обычный выбор делает.

...