質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Kotlin

Kotlinは、ジェットブレインズ社のアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、 静的型付けのオブジェクト指向プログラミング言語です。

Q&A

1回答

295閲覧

Gmailにインテントを送信したい

Dimlos

総合スコア2

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Kotlin

Kotlinは、ジェットブレインズ社のアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、 静的型付けのオブジェクト指向プログラミング言語です。

0グッド

0クリップ

投稿2024/04/01 14:01

編集2024/04/02 21:19

インテントを使ってGmailを起動して各項目を入力したいのですがうまくいきません。
ネットの情報を元にgetLaunchIntentForPackageでGmailを指定してみましたがアプリ選択の画面が出てしまいます。
どのように修正すればGmailに明示的インテントを送信できるのか教えて頂けないでしょうか?

kotlin

1package com.example.intent_mail 2 3import android.content.Intent 4import android.net.Uri 5import android.os.Bundle 6import androidx.activity.ComponentActivity 7 8 9class MainActivity : ComponentActivity() { 10 override fun onCreate(savedInstanceState: Bundle?) { 11 super.onCreate(savedInstanceState) 12 setContentView(R.layout.activity_main) 13 val intent = Intent().apply { 14 intent.setAction(Intent.ACTION_SENDTO) 15 //intent.setPackage("com.google.android.gm") 16 //intent.setClassName("com.google.android.gm","com.google.android.gm.ComposeActivityGmailExternal") 17 data = Uri.parse("mailto:") 18 putExtra(Intent.EXTRA_EMAIL, arrayOf("abc@abc.com","def@abc.com")) 19 putExtra(Intent.EXTRA_SUBJECT,"テストの件名") 20 putExtra(Intent.EXTRA_TEXT,"テストの本文"); 21 } 22 startActivity(intent); 23 finish() 24 } 25}

intent.setPackageとintent.setClassNameを個別にアクティブにして試しましたが上手くいきません。クラス名はShortcutMakerでSendtoでGmailのメール作成画面が起動する事を確認しています。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

Intent#setClassNameを使用し、パッケージ名とアクティビティ名を指定すれば良いはずです。
ただ、Gmail側のアクティビティ名は把握できていませんので、下記を参考に調査してみてください。
参考: Android開発 他のアプリを立ち上げるための方法 #アプリ - Qiita

java

1public class MainActivity { 2 private final String GMAIL_PACKAGE_NAME = "com.google.android.gm"; 3 @Override public void onCreate (Bundle savedInstanceState) { 4 String GMAIL_CLASS_NAME = getPackageClassName(GMAIL_PACKAGE_NAME); 5 if (GMAIL_CLASS_NAME == "") { 6 // 取得できなかったときのエラー処理 7 } 8 Intent intent = new Intent(Intent.ACTION_SENDTO); 9 intent.setClassName(GMAIL_PACKAGE_NAME, GMAIL_CLASS_NAME); 10 startActivity(intent); 11 } 12 private String getPackageClassName (String packageName) { 13 PackageManager manager = getPackageManager(); 14 List<PackageInfo> infoList = manager.getInstalledPackages(PackageManager.GET_ACTIVITIES | PackageManager.GET_SERVICES); 15 for (PackageInfo info : infoList) { 16 if (manager.getLaunchIntentForPackage(info.packageName) == null) continue; 17 if (info.packageName == packageName) continue; 18 return manager.getLaunchIntentForPackage(packageName).getComponent().getClassName() + ""; 19 } 20 return ""; 21 } 22}

投稿2024/04/01 23:13

編集2024/04/01 23:44
Refrain

総合スコア532

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Dimlos

2024/04/02 11:04

回答ありがとうございます。 頂いたコードを実行しようと試みたのですがエラーでビルドできませんでした。
Dimlos

2024/04/02 12:52

intent.setPackage("com.google.android.gm")や intent.setClassName("com.google.android.gm", "com.google.android.gm.ComposeActivityGmailExternal") を試してみましたがGmailが起動する事はありませんでした。
Refrain

2024/04/02 13:53

エラーとは具体的に何が発生しましたか?
Dimlos

2024/04/02 21:36

直接の質問の回答でなくて申し訳ありませんが、試行錯誤の中で参考リンクの記述を元にGmailが起動した事もありましたがエクストラが全く反映されませんでした。 質問に追記いたしましたがクラス名は別アプリで確認しています、intent.setClassNameを記述してもGmailが起動しないので困っています。 回答のコードはJavaであり、新規Javaプロジェクトでもエラーが出ますし、私はKotlinで記述していますのでAndroid Studioのコード変換機能を使ってKotlinに変換してもうまくいきません。 このコードの趣旨はクラス名を取得する事だと思いますのでクラス名は別アプリでの検証結果をみてもcom.google.android.gm.ComposeActivityGmailExternalで間違いなさそうなので何か記述が足りないかGoogleのポリシーの変更等で記述方法が変わったかだと思っています。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問