我有Ui,必须在其中捕获图像并将onActivityResult直接发送到电子邮件中,因为我已经尝试了所有可能的解决方案,但是每次都失败,并且它给我附上错误,经过长时间的搜索和实施,我发现有一些要检查的内容,如果我可以读取文件还是不像file.canRead()
这样,它总是给我错误。任何解决方案将不胜感激。
private fun sendEmail(liscence: String, desc: String) {
val emailIntent = Intent(Intent.ACTION_SEND)
val to = arrayOf("info@gmail.com")
emailIntent.putExtra(Intent.EXTRA_EMAIL, to)
emailIntent.type = "text/plain";
emailIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
// attachment Uri comes through camera
emailIntent.putExtra(Intent.EXTRA_STREAM, imagePath)
// the mail subject
emailIntent.putExtra(Intent.EXTRA_SUBJECT, "Report")
//email body
val body = "${liscence} \n ${desc}"
emailIntent.putExtra(Intent.EXTRA_TEXT, body)
//need this to prompts email client only
emailIntent.type = "message/rfc822";
startActivity(Intent.createChooser(emailIntent, "Send email using..."))
}
答案 0 :(得分:1)
这里经过大量研究,我在Android文档中找到了解决方案
https://developer.android.com/reference/android/support/v4/content/FileProvider.html#GetUri
这是我最后的代码,用于将捕获的图像共享到Gmail。
这段代码将直接转到Manifest文件,您必须使用权限作为有效的权限提供者。
<provider
android:name="android.support.v4.content.FileProvider"
android:authorities="${applicationId}.com.mydomain.fileprovider"
android:exported="false"
android:grantUriPermissions="true"
tools:replace="android:authorities">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/picker_provider_paths" />
</provider>
提供者的XML文件:
<?xml version="1.0" encoding="utf-8"?>
<paths>
<files-path name="image_picked" path="picked/"/>
<external-path name="*" path="Pictures/"/>
</paths>
将SendImage作为附件的功能。
private fun sendEmail() {
val contentUri =
FileProvider.getUriForFile(context!!,
"yourPackageAndThen.com.mydomain.fileprovider",
File(PATH OF IMAGE or FILE ));
val emailIntent = Intent(Intent.ACTION_SEND)
//need this to prompts email client only
emailIntent.type = "message/rfc822";
val to = arrayOf("EMAIL ID TO SEND")
emailIntent.putExtra(Intent.EXTRA_EMAIL, to)
emailIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
emailIntent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION)
// attachment Uri comes through camera
emailIntent.putExtra(Intent.EXTRA_STREAM, contentUri)
// the mail subject
emailIntent.putExtra(Intent.EXTRA_SUBJECT, "Report")
//email body
emailIntent.putExtra(Intent.EXTRA_TEXT, MESSAGEforBody)
startActivity(Intent.createChooser(emailIntent, "Send email using..."))
}
答案 1 :(得分:0)
您是否向应用程序添加了READ_EXTERNAL_STORAGE权限,并向Android SDK中大于23的用户要求此权限? 另外,如果您将附件另存为私人文件,则邮件将无法读取。 link对此进行了详细说明。