¿Cómo abrir Gmail Compose cuando se hace clic en un botón en la aplicación de Android?

Intento abrir la pantalla Redactar de Gmail cuando se hace clic en un botón en mi aplicación de Android. ¿Necesito alguna clave de API para esto de Google? o ¿qué debo hacer en mi botón onClickListener?

Cualquier tipo de idea es muy apreciada.

No sé si puede lanzar específicamente Gmail. ¿Has probado esto en tu onClickListener?

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

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

Como JeffC señaló, es fácil decirle a Android que quieres enviar algo parecido a un correo electrónico y que Android les dé 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. contar con.)

La siguiente aplicación demuestra el principio que puede seguir: examine 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 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); } } 
 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 } 
 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 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); } 
  

Este es el mejor método para enviar correos electrónicos al hacer clic en textView.

Simplemente coloque el código debajo 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 encoding 🙂

código:

 Intent intent=new Intent(Intent.ACTION_SEND); String[] recipients={"mailto@gmail.com"}; 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,"mailcc@gmail.com"); intent.setType("text/html"); intent.setPackage("com.google.android.gm"); startActivity(Intent.createChooser(intent, "Send mail")); 

Salida:

enter image description here

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

Descubrí usando esta publicación que la parte importante aquí es encontrar el “packageName” y el “activityInfo.name”

Solo quería usar 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 usar 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 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[]{"exampleto@gmail.com"}); 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); 

si no obtienes nada en esta línea

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

luego reemplace esta línea con

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

 Intent intent = new Intent(Intent.ACTION_SEND).setType("text/plain") .putExtra(Intent.EXTRA_EMAIL, new String[]{emails}); List 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);