web-dev-qa-db-ja.com

AndroidアプリでボタンがクリックされたときにGmail Composeを開く方法は?

AndroidアプリでボタンがクリックされたときにGmailの作成画面を開こうとしています。これにはGoogleからのAPIキーが必要ですか?またはボタンonClickListenerで何をする必要がありますか? ?

どんな洞察でも大歓迎です。

21
Aakash

特にGmailを起動できるかどうかはわかりません。 onClickListenerでこれを試しましたか

Intent emailIntent = new Intent(Intent.ACTION_SEND);
emailIntent.setType("text/plain");
startActivity(emailIntent);  

詳細はこちら: Email Android intent

36
JeffCharter

JeffCが指摘したように、基本的にAndroidをメールのようなものを送信することを伝え、Android GMailが含まれる可能性があります。GMailが特に必要な場合は、少し賢くする必要があります(正しいMIMEタイプは、実際には「プレーン/テキスト」ではなく、「テキスト/プレーン」です。実装の奇妙さに注意してください、GMailは後者に応答する唯一のアクティビティですが、これは私が当てにしている行動ではありません。)

次のアプリは、ユーザーが従うことができる原則を示しています。実際に、SENDインテントを処理できると言うすべてのアクティビティを調べて、GMailのように見えるものがあるかどうかを確認します。

package com.stackoverflow.beekeeper;

import Android.app.Activity;
import Android.content.Intent;
import Android.content.pm.PackageManager;
import Android.content.pm.ResolveInfo;
import Android.os.Bundle;

import Java.util.List;

public class StackOverflowTest extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(final Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        final Intent intent = new Intent(Android.content.Intent.ACTION_SEND);
        intent.setType("text/plain");
        final PackageManager pm = getPackageManager();
        final List<ResolveInfo> matches = pm.queryIntentActivities(intent, 0);
        ResolveInfo best = null;
        for (final ResolveInfo info : matches)
           if (info.activityInfo.packageName.endsWith(".gm") ||
        info.activityInfo.name.toLowerCase().contains("gmail")) best = info;
        if (best != null)
           intent.setClassName(best.activityInfo.packageName, best.activityInfo.name);
        startActivity(intent);
    }
 }
45
beekeeper
try{    
    Intent intent = new Intent (Intent.ACTION_VIEW , Uri.parse("mailto:" + "your_email"));
    intent.putExtra(Intent.EXTRA_SUBJECT, "your_subject");
    intent.putExtra(Intent.EXTRA_TEXT, "your_text");
    startActivity(intent);
}catch(ActivityNotFoundException e){
    //TODO smth
}
39
valerybodak
Intent intent = new Intent(Intent.ACTION_SEND);
        String[] recipients = {"[email protected]"};//Add multiple recipients here
        intent.putExtra(Intent.EXTRA_EMAIL, recipients);
        intent.putExtra(Intent.EXTRA_SUBJECT, "Mail Subject"); //Add Mail Subject
        intent.putExtra(Intent.EXTRA_TEXT, "Enter your mail body here...");//Add mail body
        intent.putExtra(Intent.EXTRA_CC, "[email protected]");//Add CC emailid's if any
        intent.putExtra(Intent.EXTRA_BCC, "[email protected]");//Add BCC email id if any
        intent.setType("text/html");
        intent.setPackage("com.google.Android.gm");//Added Gmail Package to forcefully open Gmail App
        startActivity(Intent.createChooser(intent, "Send mail"));
4
Kartik

クリックイベント内のコードの下に配置するだけです。作成モードとしてGmailを直接開きます。出力のスクリーンショットは下に添付されています。

ハッピーコーディング:-)

コード:

Intent intent=new Intent(Intent.ACTION_SEND);
String[] recipients={"[email protected]"};
intent.putExtra(Intent.EXTRA_EMAIL, recipients);
intent.putExtra(Intent.EXTRA_SUBJECT,"Subject text here...");
intent.putExtra(Intent.EXTRA_TEXT,"Body of the content here...");
intent.putExtra(Intent.EXTRA_CC,"[email protected]");
intent.setType("text/html");
intent.setPackage("com.google.Android.gm");
startActivity(Intent.createChooser(intent, "Send mail"));

出力:

enter image description here

public static void openGmail(Activity activity,String[] email, String subject, String content) {
    Intent emailIntent = new Intent(Intent.ACTION_SEND);
    emailIntent.putExtra(Intent.EXTRA_EMAIL, email);
    emailIntent.putExtra(Intent.EXTRA_SUBJECT, subject);
    emailIntent.setType("text/plain");
    emailIntent.putExtra(Android.content.Intent.EXTRA_TEXT, content);
    final PackageManager pm = activity.getPackageManager();
    final List<ResolveInfo> matches = pm.queryIntentActivities(emailIntent, 0);
    ResolveInfo best = null;
    for(final ResolveInfo info : matches)
        if (info.activityInfo.packageName.endsWith(".gm") || info.activityInfo.name.toLowerCase().contains("gmail"))
            best = info;
    if (best != null)
        emailIntent.setClassName(best.activityInfo.packageName, best.activityInfo.name);

    activity.startActivity(emailIntent);
}
3
<TextView
 Android:id="@+id/EmailId"
 Android:linksClickable="true"
 Android:autoLink="email"
 Android:text="[email protected]"
 />

これは、textViewをクリックしてメールを送信するための最良の方法です。

2
saurabh yadav

シンプルIntent.ACTION_SENDインテントセットIntent.EXTRA_EMAIL電子メールの配列セットIntent.EXTRA_SUBJECTメールの件名composerここで利用可能なその他の追加オプションを探す-> https://developer.Android.com/guide/components/intents-common#Email =

ここに簡単なコードスニペットがあります

Intent intent = new Intent(Intent.ACTION_SEND);
                intent.setType("*/*");
                intent.putExtra(Intent.EXTRA_EMAIL, new String[]{"[email protected]"});
                intent.putExtra(Intent.EXTRA_SUBJECT, "Feedback");
                if (intent.resolveActivity(ctx.getPackageManager()) != null) {
                    startActivity(intent);
                }
1
Prakhar Singh

このコードは、Gmailアプリケーションを直接起動してメールを送信します。

私は this post を使用して、ここで重要な部分は「packageName」と「activityInfo.name」を見つけることであることを知りました

セレクターなしでGmailのみを使用したかった。パッケージ名はハードコード化されているため、Gmailがパッケージ名を変更すると、機能しなくなります。

その鍵となるのはsetComponentで、最初のパラメーターはパッケージ名、2番目のパラメーターはactivityInfo名です。

しかし、注意して使用するように言ったように、私は自分自身を繰り返します。ユーザーがGmailアプリをインストールしていないか、Gmailがパッケージ名またはアクティビティ名を変更してメールを送信すると、この(ハード)コードは壊れます。あなたは警告されました;)

これが私のコードです

Intent myIntent = new Intent(Intent.ACTION_SEND);

PackageManager pm = getPackageManager();
Intent tempIntent = new Intent(Intent.ACTION_SEND);
tempIntent.setType("*/*");
List<ResolveInfo> resInfo = pm.queryIntentActivities(tempIntent, 0);
for (int i = 0; i < resInfo.size(); i++) {
    ResolveInfo ri = resInfo.get(i);
    if (ri.activityInfo.packageName.contains("Android.gm")) {
        myIntent.setComponent(new ComponentName(ri.activityInfo.packageName, ri.activityInfo.name));
        myIntent.setAction(Intent.ACTION_SEND);
        myIntent.putExtra(Intent.EXTRA_EMAIL, new String[]{"[email protected]"});
        myIntent.setType("message/rfc822");
        myIntent.putExtra(Intent.EXTRA_TEXT, "extra text");
        myIntent.putExtra(Intent.EXTRA_SUBJECT, "Extra subject");
        myIntent.putExtra(Intent.EXTRA_STREAM, Uri.parse("uri://your/uri/string");
    }
}
startActivity(myIntent);
1
EvertvdBraak
Intent intent = new Intent(Intent.ACTION_SEND).setType("text/plain")
                        .putExtra(Intent.EXTRA_EMAIL, new String[]{emails});
                List<ResolveInfo> matches = activity.getPackageManager().queryIntentActivities(intent, 0);
                ResolveInfo best = null;
                for (ResolveInfo info : matches) {
                    if (info.activityInfo.packageName.endsWith(".gm") || info.activityInfo.name.toLowerCase().contains("gmail")) {
                        best = info;
                    }
                }
                if (best != null) {
                    intent.setClassName(best.activityInfo.packageName,best.activityInfo.name);
                }
                activity.startActivity(intent);
0
vivek modi

この行に何も表示されない場合

final List<ResolveInfo> matches = pm.queryIntentActivities(intent, 0);

次に、この行を

final List<ResolveInfo> matches = pm.queryIntentActivities(intent, 1);

0
Kush Patel