#android #kotlin #uri
Вопрос:
У меня есть база данных со значениями Uri, и я хочу отправить электронное письмо с адаптера. Проблема в том, что когда я пытаюсь отправить сообщение, у меня есть: UID 10541 не имеет разрешения на content://com.android.externalstorage.documents/document/primary:Download/bilet24379308248321183796.pdf [пользователь 0]; вы можете получить доступ с помощью ACTION_OPEN_DOCUMENT или связанных API
try {
val emailIntent = Intent(Intent.ACTION_SEND)
emailIntent.type = "plain/text"
emailIntent.putExtra(Intent.EXTRA_EMAIL, arrayOf(kindleEmailAddress))
emailIntent.putExtra(Intent.EXTRA_SUBJECT, title)
emailIntent.putExtra(Intent.EXTRA_STREAM, att)
emailIntent.putExtra(Intent.EXTRA_TEXT, message)
context.startActivity(Intent.createChooser(emailIntent, "Sending email..."))
}
catch (t: Throwable) {
Toast.makeText(context, "Request failed try again: $t", Toast.LENGTH_LONG).show()
}
Я пытался добавить grantUriPermission
перед объявлением о намерении, но это не работает.
context.grantUriPermission(context.packageName, att,
Intent.FLAG_GRANT_WRITE_URI_PERMISSION or Intent.FLAG_GRANT_READ_URI_PERMISSION)
Комментарии:
1. «У меня есть база данных со значениями Uri» — как вы получили эти значения? Если ответ
ACTION_OPEN_DOCUMENT
«илиACTION_OPEN_DOCUMENT_TREE
«, вам нужно позвонитьtakePersistableUriPermission()
ContentResolver
направо, когда вы войдетеUri
onActivityResult()
. В противном случае ваши права на доступ к контенту утратят силу.2. Спасибо @CommonsWare takePersistableUriPermission() работает отлично. Ваш блог потрясающий. Много полезной информации 🙂