こちらの教本を参考にアプリからメーラーを起動しようとしたのですが、うまくいかなかったので、調べたことをメモ。
[作ればわかる!Androidプログラミング Kotlin対応 10の実践サンプルで学ぶAndroidアプリ開発入門]
【環境】
Mac OS Catalina 10.15.7
Android Studio 4.0.1
【やったこと】
教本に載っていたいやり方はこちら。(文の内容は変更しています)
val subject = "${getString(R.string.app_name)}から送信します"
val text = "本文です。"
val uri = Uri.fromParts("mailto","someone@gmail.com", null)
val intent=Intent(Intent.ACTION_SENDTO,uri)
intent.putExtra(Intent.EXTRA_SUBJECT,subject)
intent.putExtra(Intent.EXTRA_TEXT,text)
if(intent.resolveActivity(packageManager)!=null){
startActivity(intent)
}
実機でRunしてみるもメーラーが起動できず...
調べてみると、同じ症状について書かれている方を発見しました。
[いつの間にかメーラーを起動するIntentの推奨形式が変わっていて件名や本文が入力されなくなっていたので対応した]
他にも。
はっきりとしたドキュメントはないのですが、API29というかAndroid 10からIntentの扱いが大きくかわったようです。このメーラーもIntentで簡単にメールを送信する方法なので以前の方法とは異なっています。
[Android] アプリに mailer 呼び出しを設定する
デベロッパーガイドを読んでみると、確かに書き方が変わっていました。
https://developer.android.com/guide/components/intents-common?hl=ja#ViewContact
ガイドを参考に修正した内容がこちらです。
val intent = Intent(Intent.ACTION_SENDTO).apply {
data = Uri.parse("mailto:")//メールアプリのみで処理したい時に記述
val subject = "${getString(R.string.app_name)}から送信します"
val text = "本文です。"
putExtra(Intent.EXTRA_EMAIL, arrayOf( "someone@gmail.com" ))//第二引数はArrayにしないと入力されないので注意
putExtra(Intent.EXTRA_SUBJECT, subject)
putExtra(Intent.EXTRA_TEXT,text)
}
if(intent.resolveActivity(packageManager)!=null) {//インテントを処理できるアプリが存在するか確認
tartActivity(intent)//処理するアプリがいないのにstartActivityするとアプリが強制終了するので注意
}