Я хотел бы получить результат, если пользователь отправил электронное письмо или нет.
Мое приложение открывает меню Chooser для выбора приложения электронной почты.
Это то, что я реализовал:
composeEmail(arrayOf("youremail@gmail.com", subject, body)
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()
}
}
}
Я мог бы sttartActivityForResult () сделать так, как startActivityForResult(Intent.createChooser(intent, "Send mail..."), 0)
Однако Intent.ACTION_SENDTO
, Intent.ACTION_SEND
не возвращают результат. Это всегда дает Activity.RESULT_CANCELED
Я проверил это с помощью этого кода:
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
if (requestCode == RESULT_SEND_EMAIL) {
if (resultCode == Activity.RESULT_OK) {
Toast.makeText(this, "Success: $resultCode", Toast.LENGTH_SHORT).show()
// TODO: I want to do something here.
}else if(resultCode == Activity.RESULT_CANCELED) {
Toast.makeText(this, "Canceled: $resultCode", Toast.LENGTH_SHORT).show()
}else{
Toast.makeText(this, "what?: $resultCode", Toast.LENGTH_SHORT).show()
}
}
}
Есть ли способ узнать, отправил ли пользователь электронное письмо или нет? Я хотел бы вызывать некоторые функции только тогда, когда они отправлены.