2010-08-15 119 views
1

这甚至可以不调用特定的包?我发现了无数通过意向发送电子邮件的例子,但我没有发现简单地通过按钮按钮打开设备上的默认电子邮件客户端(最好在用户有多个客户端的情况下使用选择器对话框)。如何直接启动电子邮件客户端到收件箱视图?

+0

我很好奇你为什么要这样做。 – MatrixFrog 2010-08-15 23:05:40

+0

客户希望他们的应用程序有一个“电子邮件”按钮,它只是启动默认邮件客户端来检查公司邮件。 – wirbly 2010-08-15 23:16:03

回答

5

没有标准Intent操作来打开“设备上的默认电子邮件客户端”的“收件箱视图”。

+0

有没有我可以用来打开默认电子邮件客户端的标准意向操作? (即使它不是收件箱视图 - 只需触摸主屏幕上的图标启动应用程序就可以启动它) – wirbly 2010-08-15 23:21:27

+0

@wirbly:不,对不起。 – CommonsWare 2010-08-16 04:20:44

+0

好的,谢谢你的信息。看起来我正在调用一个特定的包。 – wirbly 2010-08-16 13:12:00

1

你可以从你的活动对象试试这个:

不一定会带你到收件箱直接,但它会打开电子邮件应用程序:

Intent intent = getPackageManager().getLaunchIntentForPackage("com.android.email"); 
startActivity(intent); 
+0

如果Android电子邮件客户端是默认的电子邮件程序(很少属于这种情况),那么这个方法就行得通。如果不是,则startActivity会引发异常。 – KPK 2012-02-07 02:38:40

+0

即使它的默认应用程序它不会工作。我记得一些HTC手机有不同的电子邮件包命名,如“com.htc.android.email”。所以这不起作用 – 2012-02-07 18:33:45

12

没有默认/简单的方法来做这个。此代码为我工作。它打开一个选择器与所有电子邮件应用程序注册到设备,并直接到收件箱:

Intent emailIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("mailto:")); 
    PackageManager pm = getPackageManager(); 

    List<ResolveInfo> resInfo = pm.queryIntentActivities(emailIntent, 0); 
    if (resInfo.size() > 0) { 
     ResolveInfo ri = resInfo.get(0); 
     // First create an intent with only the package name of the first registered email app 
     // and build a picked based on it 
     Intent intentChooser = pm.getLaunchIntentForPackage(ri.activityInfo.packageName); 
     Intent openInChooser = 
       Intent.createChooser(intentChooser, 
         getString(R.string.user_reg_email_client_chooser_title)); 

     // Then create a list of LabeledIntent for the rest of the registered email apps 
     List<LabeledIntent> intentList = new ArrayList<LabeledIntent>(); 
     for (int i = 1; i < resInfo.size(); i++) { 
      // Extract the label and repackage it in a LabeledIntent 
      ri = resInfo.get(i); 
      String packageName = ri.activityInfo.packageName; 
      Intent intent = pm.getLaunchIntentForPackage(packageName); 
      intentList.add(new LabeledIntent(intent, packageName, ri.loadLabel(pm), ri.icon)); 
     } 

     LabeledIntent[] extraIntents = intentList.toArray(new LabeledIntent[intentList.size()]); 
     // Add the rest of the email apps to the picker selection 
     openInChooser.putExtra(Intent.EXTRA_INITIAL_INTENTS, extraIntents); 
     startActivity(openInChooser); 
    } 
+1

最初这看起来像非常可怕的代码,但它仍然工作!我为没有安装邮件客户端的手机添加了一个else语句。 – user1354603 2015-02-09 10:41:37

+1

此代码是我发现的唯一解决方案,我发现它可以帮助我打开电子邮件收件箱(无需编写新的电子邮件),同时它可以让您选择对话框,这非常棒,谢谢Larisa – Sniper 2016-09-17 18:21:03

+0

唯一的代码位那有效。你应该把它包装成一个帮手,并把它放在GitHub Gists上。日Thnx! – CelticParser 2017-01-30 16:29:03

相关问题