Надеюсь, еще не поздно ответить.
setData()
- Этот метод автоматически очищает любой тип , который ранее был установлен setType(String)
или setTypeAndNormalize(String)
Если вы видели Примечания от среднего звена , они никогда не использовали setType()
и setData()
в то же время;
Примечание: мы не называем setType()
нигде при создании нашего ShareCompat
(хотя в видео, которое я установил).Как объясняется в setDataAndType()
Javadoc, , тип автоматически выводится из URI данных с использованием getContentResolver().getType(uriToImage)
. Поскольку FileProvider
автоматически возвращает правильный тип пантомимы , , нам вообще не нужно вручную указывать тип пантомимы .
Таким образом, использование setData()
не является необходимым, поскольку в документации также сказано:
Uri
: Uri
данных, на которые нацелено это намерение. Это значение может быть нулевым .
Кроме того, вы уже установили и получаете 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)
Хорошие образцы здесь .