【问题标题】:How do I get attachments loaded to gmail when using an intent?使用意图时如何将附件加载到 gmail 中?
【发布时间】:2021-01-09 15:38:58
【问题描述】:

我有一个应用程序,我想在其中发送包含多个 pdf 附件的电子邮件。一切似乎都正常工作,我没有遇到任何异常,但是当 Gmail 加载时,附件不包括在内。

我在 stackoverflow 和其他网站上查看了许多问题,并遵循/测试了许多解决方案,但没有一个有效。当然可以使用一些帮助。

以下是发送邮件的代码。

public void eMailDocument(ArrayList<Uri> files) {
          try {
              Log.i(TAG, "MainViewModel eMailDocument:  files = " + files);
              Intent intent = new Intent(ACTION_SEND_MULTIPLE);

              List<Intent> emailAppLauncherIntents = new ArrayList<>();
              PackageManager packageManager = context.getPackageManager();

              List<ResolveInfo> emailApps = packageManager.queryIntentActivities(intent, PackageManager.MATCH_ALL);

              for (ResolveInfo resolveInfo : emailApps) {
                  String packageName = resolveInfo.activityInfo.packageName;
                  Intent launchIntent = packageManager.getLaunchIntentForPackage(packageName);
                  emailAppLauncherIntents.add(launchIntent);
              }
              mSubjectLine = "CheckingIn app contact audit reports";
              Intent chooserIntent = Intent.createChooser(new Intent(ACTION_SEND_MULTIPLE), "Select email app:");
              chooserIntent.setAction(ACTION_SEND_MULTIPLE);
              chooserIntent.setType("application/pdf");
              //chooserIntent.setData(Uri.parse("mailto:"));
              chooserIntent.putExtra(android.content.Intent.EXTRA_EMAIL, new String[]{mCurrentUserEmailAddress});
              chooserIntent.putExtra(Intent.EXTRA_SUBJECT, mSubjectLine);
              intent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, files);
              chooserIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
              chooserIntent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
              chooserIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
              chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, emailAppLauncherIntents.toArray(new Parcelable[emailAppLauncherIntents.size()]));
              context.startActivity(chooserIntent);


            } catch(Exception e)  {
                System.out.println("is exception raises during sending mail"+e);
            }
        }

这是要添加的附件的“文件”元素中包含的数据

 files = [content://com.grgapps.checkingin.provider/external/Documents/allContactsAuditReport.pdf, content://com.grgapps.checkingin.provider/external/Documents/contactAppUsersAuditReport.pdf

【问题讨论】:

  • 您是否使用文件提供程序获取文档? Check This 可以帮到你。
  • 我正在使用 FileProvider 为附件创建多个 URI。文件文件 = 新文件(文件位置); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { uri = FileProvider.getUriForFile(context, BuildConfig.APPLICATION_ID + ".provider", file); } else { uri = Uri.fromFile(file); } files.add(uri);

标签: java android android-intent gmail


【解决方案1】:

我知道我迟到了,但这适用于我认为的人

Intent ei = new Intent(Intent.ACTION_SEND_MULTIPLE);
        ei.setType("plain/text");
        ei.putExtra(Intent.EXTRA_EMAIL, new String[] {"email id"});
        ei.putExtra(Intent.EXTRA_SUBJECT, "That one works");

        ArrayList<String> fileList = new ArrayList<String>();
        fileList.add(Environment.getExternalStorageDirectory()+"/foldername/certi/qualifications.jpg");
        fileList.add(Environment.getExternalStorageDirectory()+"/foldername/certi/certificate.jpg");
        fileList.add(Environment.getExternalStorageDirectory()+"/foldername/Aa.pdf");

        ArrayList<Uri> uris = new ArrayList<Uri>();
        //convert from paths to Android friendly Parcelable Uri's

        for (int i=0;i<fileList.size();i++)
        {
            File fileIn = new File(fileList.get(i));
            Uri u = Uri.fromFile(fileIn);
            uris.add(u);
        }

        ei.putParcelableArrayListExtra(Intent.EXTRA_STREAM, uris);
        startActivityForResult(Intent.createChooser(ei, "Sending multiple attachment"), 12345);

【讨论】:

    猜你喜欢
    • 2015-03-20
    • 2017-09-25
    • 1970-01-01
    • 2022-10-16
    • 1970-01-01
    • 2019-10-11
    • 1970-01-01
    • 2023-01-23
    • 1970-01-01
    相关资源
    最近更新 更多