2015-05-21 2 views
-1

Итак, я пытаюсь запустить предварительно заполненный почтовый клиент с данными. Содержимое заполняется отлично, однако моя проблема заключается в том, что при запуске намерения я хотел, чтобы он показывал только почтовые клиенты. Вместо этого отображается Gmail, добавление в EverNote, Android Beam, Bluetooth и некоторые другие.Цель Android не показывать только почтовые клиенты

Я не знаю, была ли проблема с lollipop, которая нарушила эту функцию или нет, поскольку один из моих менеджеров отправил мне код, который сработал для него несколько лет назад.

Мой код:

private void openEmailClient(){ 
    Intent intent = new Intent(Intent.ACTION_SEND); 
    intent.setType("message/rfc822"); 

    intent.putExtra(Intent.EXTRA_EMAIL, new String[]{getResources().getString(R.string.contact_feedback_email_address)}); 
    intent.putExtra(Intent.EXTRA_SUBJECT, getResources().getString(R.string.contact_feedback_email_subject_android)); 

    try{ 
     startActivity(Intent.createChooser(intent,intentEmailString)); 
    } catch(android.content.ActivityNotFoundException ex){ 
     Log.e(EMAIL_FAIL_TAG, EMAIL_FAIL); 
     ex.printStackTrace(); 
    } 
} 
+0

Как и в этом приложении https://play.google.com/store/apps/details?id=tenmb.social.stickers есть опции? –

+0

@waheedakhtar Да, но я хочу, чтобы он показывал почтовые клиенты, а не Bluetooth и Evernote и другие вещи – goodgamerguy

+0

В разделе отзывов этого приложения, когда вы нажимаете на изображение сообщения, вы увидите меньше вариантов совместного доступа. Я думаю, что это наименьшие вещи, которые вы можете получить в данный момент. –

ответ

1

, когда вы измените свое intent.setType, как показано ниже, вы получите

intent.setType("text/plain"); 

Использование

android.content.Intent.ACTION_SENDTO

(new Intent(Intent.ACTION_SENDTO);), чтобы получить только список клиентов электронной почты, без facebook или других приложений. Просто клиенты электронной почты.

Я бы не предложил вам напрямую перейти на приложение электронной почты. Позвольте пользователю выбрать свое любимое приложение электронной почты. Не сдерживайте его.

Если вы используете ACTION_SENDTO, putExtra не работает, чтобы добавить тему и текст в намерения. Используйте Uri для добавления темы и основного текста.

Мы можем использовать message/rfc822 вместо "text/plain" как тип MIME. Однако, это не указывает на «только предлагают клиентам по электронной почте». -. Это означает, «все, что поддерживает message/rfc822 data" предлагают Это может легко включать некоторые приложения, которые не являются клиентами электронной почты

message/rfc822 поддерживает MIME Типы .mhtml, .mht, .mime

EDIT

Intent intent = new Intent(Intent.ACTION_SENDTO, Uri.parse("mailto:[email protected]")); 
intent.putExtra("subject", "my subject"); 
intent.putExtra("body", "my message"); 
startActivity(intent); 

его работы ...

+0

Как установить тему и тело с помощью Uri? Использование ACTION_SENDTO показывает такие вещи, как bluetooth и т. Д. Я хочу, чтобы пользователи могли выбирать свое любимое почтовое приложение, но проблема в том, что такие приложения, как Bluetooth и т. Д. – goodgamerguy

+0

Yep довольно похоже на то, как я его решил, спасибо – goodgamerguy

+0

Да. Я собирался отметить свое решение в качестве ответа, но вместо этого я отметил вас – goodgamerguy

0

Попробуйте, как это она работает нормально для меня ...

Intent intent = new Intent(Intent.ACTION_SENDTO, Uri.parse("mailto:[email protected]"));  
intent.putExtra(Intent.EXTRA_SUBJECT, "Test App"); 
intent.putExtra(Intent.EXTRA_TEXT, "Email Body"); 
startActivity(intent); 

Примечание: это работает только если у вас есть адрес электронной почты.

Для получения дополнительной информации, пожалуйста, смотрите по этой ссылке Android - Is there a foolproof way to only show possible EMAIL clients?

+0

Спасибо. Я закончил тем, что делал это аналогично, когда он просто получает почтовый клиент по умолчанию – goodgamerguy

+0

приветствуется .... ,,,, –

0

Поэтому я решил это. Не идеально, но он работает лучше, чем все, что я пробовал.

я следовал документы Google это делать, который говорит, чтобы сделать это:

public void composeEmail(String[] addresses, String subject) { 
    Intent intent = new Intent(Intent.ACTION_SENDTO); 
    intent.setData(Uri.parse("mailto:")); // only email apps should handle this 
    intent.putExtra(Intent.EXTRA_EMAIL, addresses); 
    intent.putExtra(Intent.EXTRA_SUBJECT, subject); 
    if (intent.resolveActivity(getPackageManager()) != null) { 
     startActivity(intent); 
    } 
} 

и теперь он работает. Это просто находит приложение по умолчанию для обработки почты. Я не уверен, как он решает, но в моем случае он открыл GMail.На устройстве без GMail, таком как Galaxy S5, он открыл свой почтовый клиент и попросил пользователя настроить электронную почту. Не дает выбора приложения, но он работает

Смежные вопросы