ShareCompat.IntentBuilder:与收件人混合的Intent.data
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ShareCompat.IntentBuilder:与收件人混合的Intent.data相关的知识,希望对你有一定的参考价值。
我正在使用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)
(我使用过本教程:https://medium.com/androiddevelopers/sharing-content-between-android-apps-2e6db9d1368b)
你们其中一个人知道我做了什么错吗?
先感谢您
它看起来像shareIntent.data = fileUri
是问题。当我删除它时,一切正常。
希望现在回答还为时不晚。
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。
此外,您已经设置并通过type
和setType
获取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@gmail.com"))
.intent // added this
shareIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
startActivity(shareIntent)
好样品are here。
以上是关于ShareCompat.IntentBuilder:与收件人混合的Intent.data的主要内容,如果未能解决你的问题,请参考以下文章