【问题标题】:how to direct open Gmail mail composer in android?如何在 android 中直接打开 Gmail 邮件编辑器?
【发布时间】:2011-04-26 11:20:16
【问题描述】:

我正在使用以下代码。当我在设备上运行此代码时会出现问题。它会打开一个 Dailogbox,其中包含 3 个发送邮件的选项。 “POP、电子邮件、gmail”等。 通过单击 gamil,作曲家出现。 我只想直接显示 Gamil 邮件编写器。 而不是显示用于选择选项的对话框。请帮我。

Intent emailIntent = new Intent(Intent.ACTION_SEND);
emailIntent.setType("text/html");

String subject = "My Subject";

emailIntent.putExtra(Intent.EXTRA_SUBJECT, subject);

emailIntent.setType("text/html");

String title = "<p align='center'>" + storyTitle + "<br/>" + storyPubDate + "</p>";

String data = "<p> Sent From ABC APP Sent from my Android </p>";

            emailIntent.putExtra(android.content.Intent.EXTRA_TEXT, Html.fromHtml(title + data));
startActivity(Intent.createChooser(emailIntent, "Email:"));

【问题讨论】:

    标签: android gmail


    【解决方案1】:

    试试这个,完美

    public void shareToGMail(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);
    }
    

    【讨论】:

      【解决方案2】:

      不确定是否需要选择器。这是来自我的一个应用程序...

      final Intent intent = new Intent(Intent.ACTION_SEND);
      intent.setType("plain/text");
      intent.putExtra(Intent.EXTRA_EMAIL, new String[]{"jimblackler@gmail.com"});
      intent.putExtra(Intent.EXTRA_SUBJECT, subject);
      intent.putExtra(Intent.EXTRA_TEXT, content);
      activity.startActivity(intent);
      

      【讨论】:

      • 请注意,setType 应该是 text/plain 而不是 plain/text(否则你会得到一个 ActivityNotFoundException)。感谢您的提示!
      【解决方案3】:

      试试这个代码

       Intent emailIntent = new Intent(Intent.ACTION_SENDTO, Uri.fromParts(
       "mailto", "abc@gmail.com", null));
       emailIntent.putExtra(Intent.EXTRA_SUBJECT, "This is my subject text");
       context.startActivity(Intent.createChooser(emailIntent, null));
      

      参考: http://developer.android.com/reference/android/content/Intent.html#ACTION_SENDTO\

      【讨论】:

        【解决方案4】:

        以下代码对我有用。这将搜索电子邮件客户端并直接启动新的电子邮件编辑器,其中预先填充了已发送的值。如果不存在电子邮件客户端,则应捕获该客户端以避免崩溃。

        这个解决方案的好处是,在后台按下时,它会将您直接带到您的应用程序屏幕,电子邮件意图是从该屏幕开始的。

            Intent intent = new Intent(Intent.ACTION_SENDTO, Uri.parse("mailto:"));
            intent.putExtra(Intent.EXTRA_SUBJECT, "Your Subject");
            intent.putExtra(Intent.EXTRA_TEXT, "The message");
            try {
                startActivity(intent);
            } catch (android.content.ActivityNotFoundException ex) {
                Toast.makeText(this, "Mail account not configured", Toast.LENGHT_SHORT).show();
            }
        

        谢谢!

        【讨论】:

          【解决方案5】:

          您无法以编程方式绕过此弹出窗口。如果用户尝试访问该功能但未配置 GMail,会发生什么情况?

          如果您想绕过,只需删除所有其他电子邮件客户端,以便 GMail 是唯一可以发送/接收电子邮件的客户端。这样弹窗就不会出现了。

          【讨论】:

          • 是的,如果未配置 Gmail,则必须没有。但是如何从我的设备中删除所有其他客户端?
          【解决方案6】:

          如果您的 android 设备中有多个邮件编写器,并且您只希望 Gamil composer 启动您的请求,您必须

          emailIntent.setClassName("xxxgamil composer package name xxx", "xxxgmail composer class name xxx");  
              startActivity(emailIntent);
          

          【讨论】:

          • 我找到了代码。看起来您的代码 Intent intent = new Intent(android.content.Intent.ACTION_SEND); intent.setType("文本/纯文本");最终 PackageManager pm = getPackageManager();最终列表 匹配 = pm.queryIntentActivities(intent,0);解决信息最佳=空; for (final ResolveInfo info : 匹配) 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);开始活动(意图);
          • 完成。但是发送邮件后。它再次显示到对话框。我不想再打开它了?有什么建议吗?
          • 如果你已经指定了类名,你应该直接得到作曲家活动,不是吗?
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-08-29
          • 2011-08-17
          • 1970-01-01
          • 2011-07-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多