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é.
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
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);
}
}
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<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);
}
<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.
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:
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);
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);
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);