Gmail не открывается в меню выбора - PullRequest
0 голосов
/ 16 марта 2020

Я реализовал функцию отправки электронной почты в своем приложении следующим образом:

val emailIntent = Intent(Intent.ACTION_SENDTO)
emailIntent.type = "message/rfc822"
emailIntent.putExtra(Intent.EXTRA_EMAIL, arrayOf("myId@gmail.com"))
emailIntent.putExtra(Intent.EXTRA_SUBJECT, "Hello~")
emailIntent.putExtra(Intent.EXTRA_TEXT, "$sendData")

try {
    startActivityForResult(Intent.createChooser(emailIntent, "Send mail..."), RESULT_SEND_EMAIL)
} catch (ex: ActivityNotFoundException) {
    Toast.makeText(this@MyActivity, "There are no email clients installed.", Toast.LENGTH_SHORT).show()
} catch (e : Exception){
    Toast.makeText(this@MyActivity, "${e.toString()}", Toast.LENGTH_SHORT).show()
}

Я использовал startActivityForResult() для процесса после возврата из намерения.

И проблема в приложении Gmail не открывается на одном из устройств моего коллеги. Она использует Huawei Mate Pro. Он по-прежнему отображается в меню выбора приложений. Но просто не могу открыть.

Что с этим не так? Это моя проблема или проблема Gmail или проблема с устройством?

1 Ответ

0 голосов
/ 16 марта 2020

Я нашел решение в документе .

Вам необходимо использовать mailto: схему. Это позволяет вам открывать приложения электронной почты. Другими словами, все почтовые приложения должны иметь фильтр намерений со схемой для открытия вашего почтового приложения. Если вы не включите его, он не будет работать должным образом.

Пример в do c является лучшим примером.

    fun composeEmail(addresses: Array<String>, subject: String, body: String) {
        val intent = Intent(Intent.ACTION_SENDTO).apply {
            data = Uri.parse("mailto:") // only email apps should handle this
            putExtra(Intent.EXTRA_EMAIL, addresses)
            putExtra(Intent.EXTRA_SUBJECT, subject)
            putExtra(Intent.EXTRA_TEXT, body)
        }

        if (intent.resolveActivity(packageManager) != null) {
            try {
                startActivity(Intent.createChooser(intent, "Send mail...")))
            } catch (ex: ActivityNotFoundException) {
                Toast.makeText(this@MainActivity, "There are no email clients installed.", Toast.LENGTH_SHORT).show()
            }
        }
    }

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

composeEmail(arrayOf("youremail@gmail.com", subject, body)

Вы можете использовать startActivityForResult(), если хотите выполнить некоторую работу после закрытия приложения электронной почты. (Однако вы не можете определить, был ли результат отправки успешным или нет, потому что ACTION_SENDTO и ACTION_SEND ничего не возвращают, что означает, что нет большой разницы с startActivity ().

Если вы хотите отправить электронное письмо на адрес более одного человека. Вы должны добавить больше людей в массив, поэтому метод composeEmail принимает массив. Здесь вы, возможно, захотите узнать различия между ACTION_SEND и ACTION_SENDTO . ACTION_SEND - с вложением, а ACTION_SENDTO - это без вложений. Если вы хотите несколько вложений, используйте ACTION_SEND_MULIPLE.

...