2017-01-09 35 views
-1

我正在创建一个应用程序,其中有一个Gmail按钮,当用户点击Gmail时,它会使用内置gmail客户端向特定收件人发送邮件,但是当用户点击gmail按钮时会发生什么,打开设备中安装的所有客户端的列表,例如远程登录,驱动器,电子邮件,Gmail等,用户请求选项。Android意图选择器

这里是我的代码

 protected void sendEmail() { 
     Log.i("Send email", ""); 
     String[] TO = {""}; 
     String[] CC = {""}; 
     Intent emailIntent = new Intent(android.content.Intent.ACTION_SEND); 
     emailIntent.setType("message/rfc822"); //should i have to change this line of code 
     emailIntent.putExtra(Intent.EXTRA_EMAIL, TO); 
     emailIntent.putExtra(Intent.EXTRA_CC, CC); 
     emailIntent.putExtra(Intent.EXTRA_SUBJECT, "Your subject"); //message subject 
     emailIntent.putExtra(Intent.EXTRA_TEXT, "Email message goes here"); //message content 

     try { 
      startActivity(Intent.createChooser(emailIntent,"Send mail...")); 
      finish(); 
      Log.i("Finished sending email.", ""); 
     } 
     catch (android.content.ActivityNotFoundException ex) { 
      Toast.makeText(MailSenderActivity.this, "There is no email client installed.", Toast.LENGTH_SHORT).show(); 
     } 
    } 

当用户点击它只是打开内置的Gmail和电子邮件客户端只有不加息,所有的Gmail按钮我想是。我怎么能实现这个(通过改变类型或什么?)。我尝试了很多方法,但徒劳无功。

+0

可能重复http://stackoverflow.com/questions/21800948/how-to-start-and-app-chooser –

+0

L ook at http://stackoverflow.com/questions/3470042/intent-uri-to-launch-gmail-app – birraa

+0

does not work ,, .. – neha

回答

0

这适用于意图只是gmail应用程序。

Intent sendIntent = new Intent(Intent.ACTION_VIEW); 
sendIntent.setType("plain/text"); 
sendIntent.setData(Uri.parse("[email protected]")); 
sendIntent.setClassName("com.google.android.gm", "com.google.android.gm.ComposeActivityGmail"); 
sendIntent.putExtra(Intent.EXTRA_EMAIL, new String[] { "[email protected]" }); 
sendIntent.putExtra(Intent.EXTRA_SUBJECT, "test"); 
sendIntent.putExtra(Intent.EXTRA_TEXT, "hello. this is a message sent from my demo app :-)"); 
startActivity(sendIntent); 

使用了大量的电子邮件:

sendIntent.putExtra(Intent.EXTRA_EMAIL, new String[] { "[email protected]" }); 

为单封电子邮件:

sendIntent.setData(Uri.parse("[email protected]")); 

您可以添加额外的 “putExtra(Intent.EXTRA ..)” 和改变“的setType “为了你的目的。

+0

does not work ,,仍然显示客户端的整个列表 – neha

0

这里是我的代码

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

String[] strTo = { getString(R.string.mailto) }; 

intent.putExtra(Intent.EXTRA_EMAIL, strTo); 
intent.putExtra(Intent.EXTRA_SUBJECT, getString(R.string.mail_subject)); 
intent.putExtra(Intent.EXTRA_TEXT, getString(R.string.mail_body)); 

Uri attachments = Uri.parse(image_path); 
intent.putExtra(Intent.EXTRA_STREAM, attachments); 

intent.setType("message/rfc822"); 

intent.setPackage("com.google.android.gm"); 

startActivity(intent); 
+0

这项工作,但这个重定向只有内置的Gmail客户端,我希望它要求EMAIL/GMAIl – neha

+0

@neha如果你想这样,那么你必须手动显示一个对话框来选择应用程序选择。 – Andrain

+0

yaa我想要的是,请打电话给我做 – neha

0

您可以使用下面的代码重定向到Gmail不要求其他电子邮件应用

final Intent intent = new Intent(Intent.ACTION_SEND); 
     intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
     intent.setType("plain/text"); 

     PackageInfo pInfo = null; 
     try { 
      pInfo = getPackageManager().getPackageInfo(getPackageName(), 0); 
     } catch (PackageManager.NameNotFoundException e) { 
      e.printStackTrace(); 
     } 
     String version = ""; 
     if (pInfo != null) { 
      version = pInfo.versionName; 
     } 

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

     intent.putExtra(Intent.EXTRA_EMAIL, "abc.gmail.com"); 
     intent.putExtra(Intent.EXTRA_SUBJECT,"subject here !"); 
     intent.putExtra(Intent.EXTRA_TEXT,"Body here !"); 
     startActivity(intent); 
+0

我必须要求用户输入电子邮件和gmail – neha

+0

String recepientEmail =“[email protected]”; //设置为目标电子邮件或保留为空 Intent intent = new Intent(Intent.ACTION_SENDTO); intent.setData(Uri.parse(“mailto:”+ recepientEmail)); startActivity(intent); –