Android ShareCompat.IntentBuilder:Intent.data与收件人混合

Android ShareCompat.IntentBuilder:Intent.data与收件人混合,android,android-intent,Android,Android Intent,我正在使用ShareCompat.IntentBuilder发送带有附件的电子邮件 我对附加的文件没有任何问题,除了要附加的文件的uri自动添加到收件人 亲自看看: 以下是我用来发送电子邮件的代码: val fileUri = FileProvider.getUriForFile(context, context.packageName + ".fileprovider", pdfFile) val shareIntentBuilder = ShareCompat.IntentBuilder

我正在使用
ShareCompat.IntentBuilder
发送带有附件的电子邮件

我对附加的文件没有任何问题,除了要附加的文件的uri自动添加到收件人

亲自看看:

以下是我用来发送电子邮件的代码:

val fileUri = FileProvider.getUriForFile(context, context.packageName + ".fileprovider", pdfFile)
val shareIntentBuilder = ShareCompat.IntentBuilder
    .from(this@MyActivity)
    .setType(baseContext.contentResolver.getType(fileUri))
    .setStream(fileUri)
    .setSubject(getString(R.string.app_name))
    .setText("Please find attached ...")
    .setEmailTo(arrayOf("email@gmail.com"))

val shareIntent = shareIntentBuilder.intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
shareIntent.data = fileUri
startActivity(shareIntent)
(我使用过本教程:)

你们当中有人知道我犯了什么错误吗


提前谢谢你

看来问题出在
shareIntent.data=fileUri
上。当我移除它时,一切都正常。

希望现在回答还来得及

-此方法自动清除以前由设置的任何类型
setType(String)
setTypeAndNormalize(String)

如果您看到来自的注释,则它们从未同时使用
setType()
setData()

注意:在构建我们的
ShareCompat
(尽管在视频中我设置了它)。正如在报告中所解释的那样
setDataAndType()
Javadoc,从 数据URI使用
getContentResolver().getType(uriToImage)
FileProvider
会自动返回正确的mime类型
,我们不会 需要手动指定mime类型

因此,使用
setData()
是不必要的,因为文档中还提到:

Uri
:此意图现在针对的数据的
Uri
此值可能不正确 为空


另外,您已经通过
setType
&
getType(fileUri)
设置并获取了
type
,无需再次设置。但是,为了简化代码,您可以尝试使用以下方法:

val fileUri = FileProvider.getUriForFile(context, context.packageName + ".fileprovider", pdfFile)
val shareIntent = ShareCompat.IntentBuilder
                .from(this@MainActivity)
                .setType(baseContext.contentResolver.getType(fileUri))
                .setStream(fileUri)
                .setSubject(getString(R.string.app_name))
                .setText("Please find attached ...")
                .setEmailTo(arrayOf("email@gmail.com"))
                .intent // added this
shareIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
startActivity(shareIntent)
好的样品