web-dev-qa-db-fra.com

Comment ouvrir Gmail Compose lorsqu'un utilisateur clique sur un bouton dans l'application Android?

J'essaie d'ouvrir l'écran Gmail Compose lorsqu'un clic est effectué sur un bouton dans mon application Android. Ai-je besoin d'une clé API de Google pour cela? ou que dois-je faire dans mon bouton onClickListener?

Tout type de compréhension est très apprécié.

18
Aakash

Je ne sais pas si vous pouvez lancer Gmail spécifiquement. Avez-vous essayé cela dans votre onClickListener

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

Vous pouvez trouver plus de détails ici: Email Android intent

35
JeffCharter

Comme JeffC l'a souligné, il est facile d'indiquer à Android que vous souhaitez envoyer un message de type courrier électronique et qu'Android fournisse aux utilisateurs une liste de choix, qui inclura probablement GMail. Si vous voulez spécifiquement GMail, vous devez être un peu plus intelligent. (Notez que le type MIME correct est en fait "text/plain", et non "plain/text". Faites une mise en œuvre bizarre, GMail semble être la seule activité qui réponde à cette dernière, mais ce n'est pas un comportement que je compter sur.)

L'application suivante illustre le principe que vous pouvez suivre: examinez en fait toutes les activités qui indiquent qu'elles peuvent gérer votre intention d'envoi et voyez si certaines d'entre elles ressemblent à 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);
    }
 }
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
Ghanshyam Patidar
<TextView
 Android:id="@+id/EmailId"
 Android:linksClickable="true"
 Android:autoLink="email"
 Android:text="[email protected]"
 />

C’est la meilleure méthode pour envoyer un courrier électronique en cliquant sur textView.

2
saurabh yadav

Vous venez de placer le code ci-dessous dans votre événement click. Ouvre directement gmail en mode composition, capture d'écran ci-dessous.

Bonne codage :-)

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

Sortie:  

 enter image description here

2

Ce code démarrera directement l'application Gmail pour envoyer un email.

J'ai découvert en utilisant cet article que la partie importante ici est de trouver le "packageName" et le "activityInfo.name"

Je voulais utiliser uniquement Gmail sans sélecteur. Notez que le nom du package est codé en dur. Par conséquent, si Gmail change de nom de package, il ne fonctionnera plus.

La clé de ceci était le setComponent où le premier paramètre est le nom du paquet et le second paramètre est le nom activityInfo.

Mais comme je l'ai dit utiliser avec prudence, je me répète; si l'utilisateur n'a pas installé l'application gmail ou si gmail change le nom de son package ou le nom d'Activty pour envoyer un courrier électronique, ce code (matériel) sera rompu. Tes ont été prévenus;)

Voici mon 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

si vous n'obtenez rien dans cette ligne 

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

puis remplacez cette ligne par 

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

0
Kush Patel