2010-10-14 19 views

Respuesta

34

No sé si puede lanzar específicamente Gmail. ¿Usted ha intentado esto en su OnClickListener

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

Puede encontrar más detalles aquí: Email android intent

+0

n no he probado esto todavía. Pero definitivamente lo haré. Gracias por la ayuda Jeff. – Aakash

+0

text/plain works – Aakash

+0

gracias por el enlace también –

41

Como JeffC señaló, es fácil decir esencialmente Android que desea enviar algo de correo electrónico, y tienen un androide brinde a los usuarios una lista de opciones, que probablemente incluirá GMail. Si específicamente quieres GMail, tienes que ser un poco más inteligente. (Tenga en cuenta que el tipo correcto de MIME es realmente "texto/texto simple", no "texto simple"). A una peculiaridad de implementación, GMail parece ser la única actividad que responde a esta última, pero este no es un comportamiento que yo haría. cuente con.)

La siguiente aplicación demuestra el principio que puede seguir: examinar realmente todas las actividades que dicen que pueden manejar su intención de ENVIAR y ver si alguno de ellos se parece a 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

Gracias por la información y el código apicultor. De hecho, abrir cualquier otro programa de correo y dejar que el usuario elija está totalmente bien. No tiene que ser gmail. Solo ese programa debería poder enviar un correo electrónico que creo que se logra mediante la intención intencional final = nueva intención (android.content.Intent.ACTION_SEND); – Aakash

+0

Cómo abrir el correo Yahoo Programativamente como Gmail ?? –

+0

Quizás esta respuesta lo ayude: 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

Esta es la única respuesta que funcionó para mí. – Jacolack

+1

Útil, envuélvelo con ActivityNotFoundException. – Rahul

+1

@Rasi Gracias. He agregado try-catch a la respuesta. – anivaler

0

si no se consigue nada en esta línea

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

entonces reemplazar esta línea con

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

1

Este código se iniciará directamente el Gmail aplicación para enviar un correo electrónico.

He encontrado a cabo utilizando this post que la parte importante aquí es encontrar el "packageName" y el "activityInfo.name"

quería utilizar solamente Gmail sin un selector. Tenga en cuenta que el nombre del paquete está codificado de manera que si Gmail cambia su nombre de paquete no funcionará más.

La clave para esto fue el setComponent donde el primer param es el nombre del paquete y el segundo param es el nombre de activityInfo.

Pero como dije uso con precaución, me repito; si el usuario no tiene instalada la aplicación de Gmail o si gmail cambia su nombre de paquete o su nombre de Actividad para enviar un correo electrónico, este código (difícil) se romperá. Tu han sido advertidos;)

Aquí está mi código

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

Abre la aplicación de Gmail, pero tan pronto como se envía el correo electrónico no va al destinatario –

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

Este es el mejor método para enviar correo electrónico al hacer clic con 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

Agregue información adicional sobre por qué esto funcionaría – plaidDK

+0

@ plaidDK, en la lista , estamos obteniendo todos los paquetes de la aplicación instalada en el dispositivo. después de eso, revisa los paquetes de gmail poniendo la condición en for loop. si List contiene paquete de gmail, entonces por medio de intent.setClassName() establece el paquete de gmail, se abrirá directamente la aplicación de gmail, de lo contrario, se abre el intento de múltiples opciones .. –

1

Simplemente coloque el código debajo dentro de su evento de clic. Se abrirá directamente en gmail como modo de redacción, la captura de pantalla de salida se adjunta a continuación.

feliz de codificación :-)

código:

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

Salida:

enter image description here

Cuestiones relacionadas