Запустите Gmail / Email Intent в Android с отображением списка писем

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

fun startEmailApp(context: Context) {
    val emailPackage = "com.google.android.gm"
    val isGmailInstalled = isAppInstalled(context, emailPackage)

    val intent = Intent(Intent.ACTION_SEND)

    context.startActivity(Intent.createChooser(intent, "choose an email client"))

    if (isGmailInstalled) {
        intent.type = "text/html"
        intent.setPackage(emailPackage)
        context.startActivity(intent)
    } else {
        intent.type = "message/rfc822";
        context.startActivity(Intent.createChooser(intent, "choose an email client"))
    }
}

Эта реализация откроет Gmail, но на экране создания электронной почты. Как мне удается вместо этого отображать список писем во входящих?


person sativa    schedule 28.08.2020    source источник
comment
Затем вам следует запустить приложение GMail.   -  person blackapps    schedule 28.08.2020


Ответы (1)


Я хочу открыть почтовое приложение на телефоне

Это значение emailPackage будет пытаться открыть GMail, а не приложение электронной почты, выбранное пользователем.

Кстати, обратите внимание, что ваш isAppInstalled() может сломаться на Android 11, если вы не добавите элемент <queries> для внесения в белый список своей возможности найти Gmail. Наша возможность найти другие приложения через PackageManager теперь ограничена.

Как мне удается вместо этого отображать список писем во входящих?

Для приложения электронной почты не требуется, чтобы это было экспортированное действие, не говоря уже о том, что оно имеет документированный и поддерживаемый <intent-filter>.

Учитывая, что, очевидно, вы хотите поддерживать только Gmail, вы можете попробовать открыть их _6 _ / _ 7_ активность. Будет один из них, для программ запуска, и вероятно пользователь сможет легко попасть в свой почтовый ящик оттуда.

Если вы хотите поддерживать более широкий спектр почтовых приложений, вы можете:

  • Избавьтесь от emailPackage и кода, который его использует
  • Используйте Intent(Intent.ACTION_SENDTO, Uri.parse("mailto:")) в качестве селектора для _10 _ / _ 11_ Intent, чтобы вызвать селектор (при необходимости) почтовых клиентов.

См. этот ответ для получения дополнительной информации о селекторах, хотя в этом случае они используют его для уточнения ACTION_SEND Intent.

person CommonsWare    schedule 28.08.2020
comment
Спасибо, это сработало для меня: val intent = Intent (Intent.ACTION_MAIN) intent.addCategory (Intent.CATEGORY_APP_EMAIL) intent.addFlags (Intent.FLAG_ACTIVITY_NEW_TASK) context.startActivity (intent) - person sativa; 02.09.2020