Я использую 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 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)
Кто-нибудь из вас знает, какую ошибку я сделал?
заранее спасибо
Похоже, проблема была в shareIntent.data = fileUri. Когда снимаю все нормально работает.
Надеюсь, еще не поздно ответить.
setData()- This method automatically clears any type that was previously set bysetType(String)orsetTypeAndNormalize(String)
Если вы видели Примечания от средняя ссылка, они никогда не использовали setType() и setData() одновременно;
Note: we don’t call
setType()anywhere when building ourShareCompat(even though in the video I did set it). As explained in thesetDataAndType()Javadoc, the type is automatically inferred from the data URI usinggetContentResolver().getType(uriToImage). SinceFileProviderreturns the correct mime type automatically, we don’t need to manually specify a mime type at all.
Таким образом, использование setData() не требуется, поскольку в документации также сказано:
Uri: TheUriof the data this intent is now targeting. This value may be 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 protected]"))
.intent // added this
shareIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
startActivity(shareIntent)
Хорошие образцы здесь.