tags:

views:

69

answers:

2

Hi

I am trying to open up Gmail Compose screen when a button is clicked in my Android App. Do I need some API key for this from Google? or what do I need to do in my button onClickListener?

Any kind of insight is much appreciated.

+4  A: 

I don't know that you can specifically launch gmail. Have you tried this in your onClickListener

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

You can find more details here: Email android intent

JeffC
No I haven't tried this yet. But I definitely will. Thanks for the help Jeff.
Aakash
Excellent link thanks!
Aakash
Excellent advice, except that the correct type is "text/plain".
beekeeper
text/plain works
Aakash
+2  A: 

As JeffC pointed out, it is easy to essentially tell Android that you want to send something email-like and have Android give users a list of choices, which will probably include GMail. If you specifically want GMail, you have to be a bit cleverer. (Note that the correct MIME type is actually "text/plain", not "plain/text". Do to an implementation oddity, GMail seems to be the only activity which responds to the latter, but this isn't a behavior I would count on.)

The following App demonstrates the principle you can follow: actually examine all of the activities which say they can handle your SEND intent and see if any of them look like 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);
  }
}
beekeeper
Thanks for the info and code beekeeper. For that matter opening any other mail program and let the user choose is totally fine. It doesnt have to be gmail. Only that program should be able to send an email which I think is accomplished by final Intent intent = new Intent(android.content.Intent.ACTION_SEND);
Aakash