Как открыть почтовый клиент по умолчанию в Android, не отправляя сообщение? - PullRequest
0 голосов
/ 15 января 2019

Я ищу способ открыть почтовое приложение по умолчанию на Android, но без его использования для отправки сообщения. Я знаю, что могу сделать это, используя mailto:// или намеренные параметры, но это автоматически открывает новый экран сообщений. То, что я хочу архивировать, это просто открыть само приложение.

Пока что пробовал

override fun startEmailApplication() {
    val intent = Intent(Intent.ACTION_MAIN)
    intent.addCategory(Intent.CATEGORY_APP_EMAIL)
    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
    startActivity(intent)
}

Но каждый раз, когда я получаю

android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.VIEW cat=[android.intent.category.APP_EMAIL] flg=0x10000000 }

Через приложение электронной почты (AquaMail, Outlook) установлено.

Ответы [ 2 ]

0 голосов
/ 15 января 2019

Я бы использовал сочетание небольших вещей.

  1. Обнаружение отвечающих пакетов для данного намерения:

    Intent intent = new Intent(Intent.ACTION_SENDTO);
    intent.setType("text/plain");
    List<ResolveInfo> resolveInfos = getPackageManager().queryIntentActivities(intent, 0);
    boolean canResolve = resolveInfos.size() > 0; 
    

В этом списке будут перечислены доступные пакеты для ответа на такие намерения. Использование queryIntentActivities() позволяет мне получить ResolveInfo, который предоставляет дополнительную информацию о приложении.

  1. Выберите первый и откройте его, используя имя пакета:

    if (resolveInfos.size() > 0) {
        startActivity(getPackageManager().getLaunchIntentForPackage(resolveInfos.get(0).resolvePackageName))
    }
    

У вас также не будет ActivityNotFoundException, потому что мы проверяем заранее, что-то ответит на наш Intent. Не стесняйтесь обращаться с неисправным случаем в else.

0 голосов
/ 15 января 2019

Вы можете сделать следующее:

Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_APP_EMAIL);
getActivity().startActivity(intent);
...