Стартирайте Gmail / Имейл намерение в 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, можете да опитате да отворите тяхната ACTION_MAIN/CATEGORY_LAUNCHER активност. Ще има един от тях за стартиращи устройства и вероятно потребителят може лесно да стигне до входящата си кутия оттам.

Ако искате да поддържате по-широка гама от имейл приложения, бихте могли:

  • Отървете се от emailPackage и кода, който го използва
  • Използвайте Intent(Intent.ACTION_SENDTO, Uri.parse("mailto:")) като селектор за MAIN/LAUNCHER 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