it-swarm.com.de

Wie kann ich Google Mail Compose öffnen, wenn in der Android-App auf eine Schaltfläche geklickt wird?

Ich versuche, den Google Mail-Erstellungsbildschirm zu öffnen, wenn in meiner Android-App auf eine Schaltfläche geklickt wird. Benötige ich dafür einen API-Schlüssel von Google? oder was muss ich in meinem button onClickListener tun?

Jede Art von Einsicht wird sehr geschätzt.

18
Aakash

Ich weiß nicht, dass Sie Google Mail gezielt starten können. Haben Sie dies in Ihrem onClickListener versucht

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

Weitere Informationen finden Sie hier: E-Mail an Android-Absichten senden

35
JeffCharter

JeffC weist darauf hin, dass es einfach ist, Android im Wesentlichen mitzuteilen, dass Sie etwas per E-Mail senden möchten und dass Android Benutzern eine Liste mit Auswahlmöglichkeiten zur Verfügung stellt, die wahrscheinlich auch GMail umfassen. Wenn Sie speziell auf GMail zugreifen möchten, müssen Sie etwas klüger sein. (Beachten Sie, dass der richtige MIME-Typ eigentlich "text/plain" ist, nicht "plain/text".) Tatsächlich scheint GMail die einzige Aktivität zu sein, die auf Letzteres reagiert, aber dies ist kein Verhalten, das ich nicht tun würde verlassen auf.)

Die folgende App demonstriert das Prinzip, dem Sie folgen können: Überprüfen Sie alle Aktivitäten, die besagen, dass sie Ihre SEND-Absicht bearbeiten können, und sehen Sie, ob eine davon wie GMail aussieht.

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);
    }
 }
42
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
}
36
anivaler
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]"
 />

Dies ist die beste Methode, um per Klick auf textView eine E-Mail zu senden.

2
saurabh yadav

Sie fügen einfach den Code in Ihr Klickereignis ein. Öffnet direkt gmail als Erstellungsmodus. Untenstehender Screenshot.

Viel Spaß beim Codieren :-)

code:

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"));

Ausgabe:  

 enter image description here

Dieser Code startet die Google Mail-Anwendung direkt, um eine E-Mail zu senden.

Ich habe herausgefunden mit diesem Beitrag , dass es hier wichtig ist, den "packageName" und den "activityInfo.name" zu finden.

Ich wollte nur Google Mail ohne einen Wahlschalter verwenden. Beachten Sie, dass der Paketname hart codiert ist. Wenn Gmail seinen Paketnamen ändert, funktioniert es nicht mehr.

Der Schlüssel dazu war setComponent, wobei der erste Parameter der Paketname und der zweite Parameter der Name der ActivityInfo ist.

Aber wie ich mit Vorsicht gesagt habe, wiederhole ich mich; Wenn der Benutzer die Google Mail-App nicht installiert hat oder Google Mail den Paketnamen oder den Activty-Namen ändert, um eine E-Mail zu senden, wird dieser (harte) Code beschädigt. Du wurdest gewarnt;)

Hier ist mein Code

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

Sie können den einfachen Vorsatzsatz Intent.ACTION_SENDIntent.EXTRA_EMAIL Für eine Reihe von E-Mails verwenden. Legen Sie Intent.EXTRA_SUBJECT Für die Betreffzeile in E-Mail fest. composer Hier finden Sie weitere EXTRA-Optionen https: //developer.Android.com/guide/components/intents-common#Email

Hier ist ein kurzer Codeausschnitt

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);
                }
0
Prakhar Singh
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"));
0
Kartik

wenn Sie nichts in dieser Zeile bekommen 

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

dann ersetzen Sie diese Zeile mit 

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

0
Kush Patel