Android 已在本地文件目录中发送带有附件的电子邮件

Android 已在本地文件目录中发送带有附件的电子邮件,android,email,attachment,email-attachments,Android,Email,Attachment,Email Attachments,我成功地将数据作为csv文件导出到外部存储目录,然后通过电子邮件将其作为附件发送和接收。唯一的问题是这个文件会出现在一个公共目录中,这会让人感到困惑,而且不必要(还需要额外的权限) 所以我尝试将导出文件存储在private files目录中。我可以将文件保存到该目录,打开电子邮件客户端(myMail和Gmail),在发送之前查看带有正确文件大小信息的附件。但在发送后,我收到了没有附件的邮件。是否可以为此使用私有文件目录 String fileName = reportName + ".csv";

我成功地将数据作为csv文件导出到外部存储目录,然后通过电子邮件将其作为附件发送和接收。唯一的问题是这个文件会出现在一个公共目录中,这会让人感到困惑,而且不必要(还需要额外的权限)

所以我尝试将导出文件存储在private files目录中。我可以将文件保存到该目录,打开电子邮件客户端(myMail和Gmail),在发送之前查看带有正确文件大小信息的附件。但在发送后,我收到了没有附件的邮件。是否可以为此使用私有文件目录

String fileName = reportName + ".csv";
            try {
                FileOutputStream fileOutputStream = getApplication().openFileOutput(fileName, MODE_PRIVATE);
                fileOutputStream.write(sbCsv.toString().getBytes());
                fileOutputStream.flush();
                fileOutputStream.close();
            } catch (Exception e) {
                D.e(e);
            }

            Uri exportFile = null;
            File file = getApplication().getFileStreamPath(fileName);
            // File file = new File(getApplication().getFilesDir(), fileName);
            exportFile = Uri.fromFile(file);
            Intent emailIntent = new Intent(Intent.ACTION_SEND);
            emailIntent.putExtra(Intent.EXTRA_SUBJECT, "testSubject");
            emailIntent.putExtra(Intent.EXTRA_STREAM, exportFile);
            String aEmailList[] = {"test@test.org"};
            emailIntent.putExtra(Intent.EXTRA_EMAIL, aEmailList);
            emailIntent.setType("message/rfc822");
            emailIntent.putExtra(
                    Intent.EXTRA_TEXT,
                    Html.fromHtml(sbBody
                            .toString())
            );
            startActivityForResult(emailIntent, REQUESTCODE_SENTEMAIL);

令人惊讶的是,文件大小还可以。尝试将模式\u PRIVATE更改为模式\u WORLD\u READABLE。否则,请使用内容提供商。谢谢,这是可行的,但MODE_WORLD_READABLE被贬低了,这就是我以前没有使用它的原因。所以我可以和内容提供商一起尝试。我只是想知道这是否真的有必要,因为我只想用电子邮件发送一个导出文件,并且在发送后不再需要该文件。然后将其放在外部缓存中。删除第二天,因为我认为在onActivityResult中这样做还早。但你可以试试。我以前做过类似的事情,但我也想取消额外的权限。然后试试内容提供商。或是忽略了这些批评。