我正在尝试为用户创建一个选项,只能通过电子邮件从我的应用程序发送文件。该文件是应用程序内部的,并且可以通过FileProvider访问。
这是contentURI的样子:content://packagename.files/files/somefile.ext
正如您所看到的,我正在提供给用户将文件共享到PicsArt、Google Drive、OneDrive和EMail。 我可以成功地将内容分享给前三个客户,因为他们有非常具体的应用程序。但是当涉及到电子邮件时,我需要用户从他在手机上安装的应用程序中选择客户端。
这里有两组代码我创建了:
代码选项1:
上面的代码显示了一个选择器,其中有许多应用程序可以处理文件,如下图所示。
这是代码的结果: 但是,现在的问题是我无法从内容提供者(FileProvider)发送文件。在选择后,电子邮件客户端显示以下消息:
这是contentURI的样子:content://packagename.files/files/somefile.ext
正如您所看到的,我正在提供给用户将文件共享到PicsArt、Google Drive、OneDrive和EMail。 我可以成功地将内容分享给前三个客户,因为他们有非常具体的应用程序。但是当涉及到电子邮件时,我需要用户从他在手机上安装的应用程序中选择客户端。
这里有两组代码我创建了:
代码选项1:
Intent EMail = ShareCompat.IntentBuilder.from(this)
.setType("message/rfc822")
.setSubject("Emailing: File Attached")
.setText("Hello")
.setStream(contentUri)
.setChooserTitle("Send via EMail").getIntent();
startActivity(Intent.createChooser(EMail, "Send via EMail"));
上面的代码显示了一个选择器,其中有许多应用程序可以处理文件,如下图所示。
如果我选择任何电子邮件客户端应用程序或其他应用程序,这个工作得很好。
但问题在于,用户有选择任何应用程序的选项,这不是应用程序的期望行为。因此,我将代码修改如下:
final Intent _Intent = new Intent(Intent.ACTION_SENDTO);
_Intent.setType("text/html");
_Intent.setData(Uri.parse("mailto:"));
_Intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
_Intent.putExtra(Intent.EXTRA_STREAM, contentUri);
_Intent.putExtra(android.content.Intent.EXTRA_SUBJECT,
"Emailing: File Attached");
_Intent.putExtra(android.content.Intent.EXTRA_TEXT,
"Hello");
startActivity(Intent.createChooser(_Intent, "Send via EMail"));
这是代码的结果: 但是,现在的问题是我无法从内容提供者(FileProvider)发送文件。在选择后,电子邮件客户端显示以下消息:
在上述列表中的任何客户端中,都无法将文件附加到电子邮件中。
如果有人能帮我解决这个问题,我将非常感激。我认为,我已经尝试了所有可能的情况,通过更改MIME类型、以不同方式设置内容、设置数据流等,但无法获得所需的结果。
如果您需要其他详细信息,请告诉我。
再次感谢您的帮助。