ShareCompat.IntentBuilder: Intent.data, смешанный с получателем - PullRequest
0 голосов
/ 12 октября 2018

Я использую 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@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)

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

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

Ответы [ 2 ]

0 голосов
/ 20 октября 2018

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

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)

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

0 голосов
/ 16 октября 2018

Похоже, проблема была shareIntent.data = fileUri.Все отлично работает, когда убираю.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...