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

问题描述 投票:3回答:2

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

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

自己看:

enter image description here

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

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 protected]"))

val shareIntent = shareIntentBuilder.intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
shareIntent.data = fileUri
startActivity(shareIntent)

(我使用过本教程:https://medium.com/androiddevelopers/sharing-content-between-android-apps-2e6db9d1368b

你们其中一个人知道我做了什么错吗?

先感谢您

android android-intent
2个回答
0
投票

它看起来像shareIntent.data = fileUri是问题。当我删除它时,一切正常。


0
投票

希望现在回答还为时不晚。

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

如果你看到the medium link的笔记,他们从未同时使用过setType()setData();

注意:在构建我们的setType()时,我们不会在任何地方调用ShareCompat(即使在我设置它的视频中)。正如setDataAndType() Javadoc中所解释的那样,使用getContentResolver().getType(uriToImage)从数据URI中自动推断出类型。由于FileProvider会自动返回正确的mime类型,因此我们根本不需要手动指定mime类型。

所以使用setData()是不必要的,因为文档也说:

Uri:此意图目前针对的数据的Uri。该值可以为null。


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

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 protected]"))
                .intent // added this
shareIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
startActivity(shareIntent)

好样品are here

© www.soinside.com 2019 - 2024. All rights reserved.