【发布时间】:2018-03-22 11:44:43
【问题描述】:
我有以下 kotlin 代码来发送带有附件的电子邮件:
val file = File(directory, filename)
file.createNewFile()
file.writeText("My Text", Charsets.UTF_8)
// ---- file is written succesfully, now let us
// try to get the URI and pass it for the intent
val fileURI = FileProvider.getUriForFile(this, "com.mydomain.myapp", file!!)
val emailIntent = Intent(Intent.ACTION_SEND).apply {
putExtra(Intent.EXTRA_SUBJECT, "My subject"))
putExtra(Intent.EXTRA_TEXT, "My message")
putExtra(Intent.EXTRA_STREAM, fileURI)
}
emailIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
emailIntent.type = "text/plain"
startActivity(emailIntent)
现在,当我运行上面的代码时,我得到一个错误:
java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.res.XmlResourceParser android.content.pm.ProviderInfo.loadXmlMetaData(android.content.pm.PackageManager, java.lang.String)' on a null object reference
用于 fileURI 分配行。如果不是 FileProvider,如果我使用:
putExtra(Intent.EXTRA_STREAM, file!!.toURI())
作为额外的意图参数,我得到一个错误:
W/Bundle: Key android.intent.extra.STREAM expected Parcelable but value was a java.net.URI. The default value <null> was returned.
03-22 11:39:06.625 9620-9620/com.secretsapp.secretsapp W/Bundle:尝试强制转换生成的内部异常:
W/Bundle: Key android.intent.extra.STREAM expected Parcelable but value was a java.net.URI. The default value <null> was returned.
W/Bundle: Attempt to cast generated internal exception:
java.lang.ClassCastException: java.net.URI cannot be cast to android.os.Parcelable
at android.os.Bundle.getParcelable(Bundle.java:945)
该文件是在全局Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOCUMENTS) 目录下的子目录下创建的,并且应用程序也具有Manifest.permission.WRITE_EXTERNAL_STORAGE 权限。关于如何获取文件的 URI 并将其附加到电子邮件意图的任何指针?
【问题讨论】:
标签: android kotlin kotlin-android-extensions