5
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Android Studio】アプリからメーラーを起動するやり方が変わっていたので対応した【Kotlin】

Last updated at Posted at 2020-10-27

こちらの教本を参考にアプリからメーラーを起動しようとしたのですが、うまくいかなかったので、調べたことをメモ。
[作ればわかる!Androidプログラミング Kotlin対応 10の実践サンプルで学ぶAndroidアプリ開発入門]

【環境】

Mac OS Catalina 10.15.7
Android Studio 4.0.1

【やったこと】

教本に載っていたいやり方はこちら。(文の内容は変更しています)

MainActivity.kt
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

ガイドを参考に修正した内容がこちらです。

MainActivity.kt
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するとアプリが強制終了するので注意
}

【結果】

メーラーが起動できるようになりました!
(「Our Menu」はアプリ名です)
Screenshot_20201027-224836.jpg

5
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?