Почему Intent.EXTRA_EMAIL приводит к опции WhatsApp в диалоге выбора, когда WhatsApp НЕ является почтовым приложением? - PullRequest
0 голосов
/ 25 июня 2018
Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType("email/text");
intent.putExtra(Intent.EXTRA_EMAIL, new String[]"foo@gmail.com"});
startActivity(Intent.createChooser(intent,"Send Mail"));

В этом диалоговом окне выбора я получаю опцию типа «GMail», и она отлично работает.Когда я выбираю приложение Gmail, оно заполняет поле «Кому» (получатели) как "foo@gmail.com", как требуется.

Мой вопрос заключается в том, почему этот селектор также отображает «WhatsApp», когда дескриптор WhatsApp CANNOT такое намерение.Даже если я выберу WhatsApp и попытаюсь отправить сообщение, он ничего не сделает (потому что WhatsApp не может обработать намерение заполнить «Кому», как это могут делать приложения электронной почты).Приложение не падает.

Теперь я понимаю, что WhatsApp может прослушивать это намерение, потому что тип включает в себя «текст», но если я попытаюсь использовать:

intent.setType("email");

Диалог выбора говорит«Нет приложения для выполнения этой функции».

Теперь, это ошибка разработчиков WhatsApp?Или я использую намерение отправки почты неправильно (и как мне тогда его использовать)?

Надеюсь, я дал понять, пожалуйста, спросите что-нибудь еще, что нужно знать.

Спасибо!

1 Ответ

0 голосов
/ 25 июня 2018

В этом диалоговом окне выбора я получаю опцию, например «GMail», и она отлично работает.

Это означает, что Gmail должен поддерживать шаблон подстановки */* для типа MIME., поскольку email/text не является допустимым типом MIME.

Мой вопрос заключается в том, почему этот селектор также отображает «WhatsApp», когда WhatsApp НЕ МОЖЕТ обрабатывать такое намерение

Разработчикиприложения WhatsApp считают, что они могут обрабатывать такие Intent.

Даже если я выберу WhatsApp и попытаюсь отправить сообщение, он ничего не сделает (потому что WhatsApp не может обработать намерение заполнить «Кому», какприложения для электронной почты могут).

Тот факт, что WhatsApp игнорирует EXTRA_EMAIL, вполне оправдан.ACTION_SEND - это запрос , а не команда.EXTRA_EMAIL является предложением , а не командой.Например, Gmail не обязан обращать внимание на EXTRA_EMAIL в его реализации ACTION_SEND.Это случается, но не думайте, что все реализации ACTION_SEND будут обращать внимание на EXTRA_EMAIL.

, если я попытаюсь использовать intent.setType("email"); В диалоговом окне выбора «нет приложения длявыполнить эту функцию '.

Это потому, что email не имеет структуры типа MIME.

Или я использую намерение отправки почты неправильным способом(и как мне тогда его использовать)?

В Android нет "намерения отправки почты".

Вашему ACTION_SEND Intent не хватает ничего для отправки, так каку него нет ни EXTRA_TEXT, ни EXTRA_STREAM.В результате, лоты из ACTION_SEND -поддерживаемых действий не принесут ничего полезного с вашими Intent.

JavaDocs для ACTION_SEND немноготрудно читать, но это объясняет, для чего ACTION_SEND Intent и как его настроить.В документации также есть это и это также могут быть полезны.

...