2014-09-01 51 views
1

Intent.ACTION_SENDTO两个选择,但我的克伦特是要求删除Gmail的选项,我看不到出路,请帮我Intent.ACTION_SENDTO显示两个选择,我想在节目只显示一个

Intent emailIntent = 
new Intent(Intent.ACTION_SENDTO, 
Uri.fromParts("mailto",userInput.getText().toString(), null)); 
emailIntent.putExtra(Intent.EXTRA_SUBJECT, "Press Release"); 
emailIntent.putExtra(android.content.Intent.EXTRA_TEXT, "Please view this press release"); 
startActivity(Intent.createChooser(emailIntent,"Send mail using...")); 

enter image description here

+0

它会显示所有默认的可能的行动这是在设备可用。由于该设备具有Gmail应用,因此该选择器也会显示Gmail。 – 2014-09-01 09:15:00

+0

是否意味着您想要直接打开电子邮件编辑器或仅用于删除Gmail。 – SilentKiller 2014-09-01 09:15:01

+0

我的需求是从这个意图删除Gmail,但我知道,但是告诉如果有一种方法可以直接去电子邮件作曲家而不显示这两个图标 – 2014-09-01 09:31:07

回答

3

在调用startActivity之前使用 emailIntent.setPackage(PackageName of Email app);


您需要设置邮件客户端包名,不过,在三星设备com.sec.android.email是默认内置的邮件客户端,但在HTC是com.htc.android.mail等。所以首先你需要过滤该应用程序,然后设置为意图。我加入的解决方案

Intent emailIntent = new Intent(Intent.ACTION_SENDTO, Uri.fromParts(
     "mailto", userInput.getText().toString(), null)); 
emailIntent.putExtra(Intent.EXTRA_SUBJECT, "Press Release"); 
emailIntent.putExtra(android.content.Intent.EXTRA_TEXT, 
     "Please view this press release"); 

// Identify the package name of email client and set to intent 
List<ResolveInfo> resInfo = getPackageManager().queryIntentActivities(emailIntent, 0); 
if (!resInfo.isEmpty()) { 
    for (ResolveInfo info : resInfo) { 
     if (info.activityInfo.packageName.toLowerCase().contains(".android.email") 
       || info.activityInfo.name.toLowerCase().contains(".android.email")) { 
      emailIntent.setPackage(info.activityInfo.packageName); 
      // And now call 
      startActivity(Intent.createChooser(emailIntent, "Send mail using...")); 
     } 
    } 
} 

你应该阅读Android: How to get the native Email clients package name

+2

我认为'com.google.android.gm'是Gmail应用程序的包名,而问题是关于**,但我的clent要求删除Gmail选项** – SilentKiller 2014-09-01 09:28:44

+0

感谢您与我分享您的研究 – 2014-09-01 09:59:31

0

如果要删除Gmail客户端从列表中创建一个自定义cooser

List<Intent> intents = new ArrayList<Intent>(); 
      Intent sendIntent = new Intent(android.content.Intent.ACTION_SEND); 
      sendIntent.setType("text/plain"); 
      List<ResolveInfo> resInfo = getPackageManager().queryIntentActivities(sendIntent, 0); 
      if (!resInfo.isEmpty()){ 
       for (ResolveInfo resolveInfo : resInfo) { 
        String packageName = resolveInfo.activityInfo.packageName; 
        Intent neededShareIntent = new Intent(android.content.Intent.ACTION_SEND); 
        neededShareIntent.setType("text/plain"); 
        neededShareIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, "Subject"); 
        neededShareIntent.setPackage(packageName); 
        if (!StringUtils.equals(packageName, "com.google.android.gm")){ 
         intents.add(neededShareIntent); 
        } 

       } 
       Intent chooserIntent = Intent.createChooser(intents.remove(0), "Select app to share"); 

       chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, intents.toArray(new Parcelable[]{})); 

       startActivity(chooserIntent); 
      } 

PLS测试此代码,并检查

+1

我认为'com.google.android.gm'是Gmail应用程序的包名,而问题是关于**但我的clent要求删除Gmail选项** – SilentKiller 2014-09-01 09:29:38

+0

好友我复制了您的代码但仍显示我两个图标 – 2014-09-01 09:34:06

+0

什么关于他是否在设备上有三个电子邮件客户端? – 2014-09-01 09:41:07

相关问题