2010-10-14 5 views

Répondre

34

Je ne sais pas si vous pouvez lancer spécifiquement gmail. Avez-vous essayé 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

+0

Non Je n'ai pas encore essayé. Mais je le ferai certainement. Merci pour l'aide Jeff. – Aakash

+0

text/plain works – Aakash

+0

merci pour le lien aussi –

41

Comme JeffC a souligné, il est facile de l'essentiel dire Android que vous voulez envoyer comme email quelque chose et Android donner aux utilisateurs une liste de choix, qui comprendra 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", pas "plain/text".) Pour une implémentation bizarre, GMail semble être la seule activité qui répond à ce dernier, mais ce n'est pas un comportement que je voudrais compter sur.)

L'application suivante montre le principe que vous pouvez suivre: en fait examiner toutes les activités qui disent qu'ils peuvent gérer votre intention SEND et voir si l'un d'eux ressemble à 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); 
    } 
} 
+0

Merci pour l'info et apiculteur de code. D'ailleurs ouvrir n'importe quel autre programme de messagerie et laisser l'utilisateur choisir est totalement correct. Il ne doit pas être gmail. Seul ce programme devrait être en mesure d'envoyer un email que je pense est accompli par le final Intention intention = new Intent (android.content.Intent.ACTION_SEND); – Aakash

+0

Comment ouvrir un mail Yahoo Programatically like Gmail ?? –

+0

Peut-être que cette réponse vous aidera: http://stackoverflow.com/questions/9516334/how-to-open-gmail-yahoo-mail-and-rediff-mails-in-application-programmatically – anivaler

31
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 
} 
+0

C'est la seule réponse qui a fonctionné pour moi. – Jacolack

+1

Utile, enveloppez-le avec ActivityNotFoundException. – Rahul

+1

@Rasi Merci. J'ai ajouté try-catch à la réponse. – anivaler

0

si vous ne recevez rien dans cette ligne

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

puis remplacer cette ligne avec

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

1

Ce code va commencer directement le gmail application pour envoyer un email.

Je trouve à l'aide this post que la partie importante est de trouver le « packageName » et le « activityInfo.name »

Je voulais utiliser seulement gmail sans chooser. Notez que le nom du paquet est codé en dur, donc si Gmail change son nom de fichier, il ne fonctionnera plus.

La clé de cet élément était setComponent, où le premier paramètre est le nom du package et le second, le nom activityInfo. Mais comme je l'ai dit à utiliser avec prudence, je me répète; Si l'application gmail n'est pas installée sur l'utilisateur ou si Gmail modifie son nom de package ou son nom Activty pour envoyer un e-mail, ce code (dur) sera rompu. Ton ont été mis en garde;)

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); 
2
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); 
} 
+0

Il ouvre l'application gmail, mais dès que l'email est envoyé, il ne va pas au destinataire –

2
<TextView 
android:id="@+id/EmailId" 
android:linksClickable="true" 
android:autoLink="email" 
android:text="[email protected]" 
/> 

Ceci est la meilleure méthode pour envoyer des e-mails sur un clic de textView.

0
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

S'il vous plaît ajouter des informations supplémentaires sur pourquoi cela fonctionnerait – plaidDK

+0

@ plaidDK, Dans la liste , nous recevons tous les paquets de l'application installée sur l'appareil. après cela, vérifiez les paquets de gmail en mettant la condition dans la boucle. si la liste contient le paquet gmail, alors par le paquetage gmail de intent.setClassName(), il ouvrira directement l'application gmail, sinon il ouvrira plusieurs options. –

1

Vous juste passez dessous le code à l'intérieur de votre événement click. Ouvre directement Gmail en mode de composition, capture d'écran de sortie 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

Questions connexes