ShareCompat.IntentBuilder: Intent.data смешан с получателем

Я использую ShareCompat.IntentBuilder, чтобы отправить электронное письмо с прикрепленным файлом.

У меня нет проблем с прикрепленным файлом, за исключением того, что uri файла, который я хочу прикрепить, автоматически добавляется к получателю.

Смотрите сами:

ShareCompat.IntentBuilder: Intent.data смешан с получателем

Вот код, который я использую для отправки электронного письма:

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)

Кто-нибудь из вас знает, какую ошибку я сделал?

заранее спасибо

4
0
833
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Похоже, проблема была в shareIntent.data = fileUri. Когда снимаю все нормально работает.

Надеюсь, еще не поздно ответить.

setData() - This method automatically clears any type that was previously set by setType(String) or setTypeAndNormalize(String)

Если вы видели Примечания от средняя ссылка, они никогда не использовали setType() и setData() одновременно;

Note: we don’t call setType() anywhere when building our ShareCompat (even though in the video I did set it). As explained in the setDataAndType() Javadoc, the type is automatically inferred from the data URI using getContentResolver().getType(uriToImage). Since FileProvider returns the correct mime type automatically, we don’t need to manually specify a mime type at all.

Таким образом, использование setData() не требуется, поскольку в документации также сказано:

Uri: The Uri of 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)

Хорошие образцы здесь.

Другие вопросы по теме