Используйте URI для получения растрового изображения в другом действии - PullRequest
0 голосов
/ 07 февраля 2019

Я получил URI изображения в деятельности, например: ImageActivity и установил URI для объекта с именем Item.

val item = Item()
item.imageURI = uri

Теперь у меня естьвозвращенный результат от ImageActivity, например: UploadActivity.

Теперь я хочу загрузить объект Item, полученный от ImageActivity из UploadActivity.Я загружаю изображение, кодируя Bitmap изображения в Base64.Итак, мне нужно Bitmap изображения.

Я получил это следующим образом:

val bitmap = MediaStore.Images.Media.getBitmap(contentResolver, item.imageURI)
item.itemImage = imageToString(bitmap)

Но это показывает ошибку:

java.lang.SecurityException: Permission Denial: opening provider com.miui.gallery.provider.GalleryOpenProvider from ProcessRecord

Как решить эту проблему?Пожалуйста, подробно опишите свой ответ.

1 Ответ

0 голосов
/ 08 февраля 2019

Я получаю это изображение из Галереи

Я собираюсь интерпретировать это как означающее, что вы используете Intent как ACTION_GET_CONTENT или ACTION_PICK.

Если это так, то по умолчанию единственное место, которое можно использовать Uri, - это экземпляр действия, который его получает (ImageActivity в вашем случае).

Вашварианты включают в себя:

  • Избавьтесь от UploadActivity и сделайте что-нибудь еще.Например, вы можете сделать так, чтобы фактическую загрузку выполнял репозиторий, с пользовательским интерфейсом, обработанным ImageActivity (напрямую, с помощью фрагментов и т. Д.).

  • Передайте Uriна UploadActivity через фасет «data» Intent, плюс включите FLAG_GRANT_READ_URI_PERMISSION для этого Intent

Этот второй вариант будет выглядеть примерно так:

startActivity(Intent(this, OtherActivity::class.java).setData(yourUri).addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION))

(где yourUri - ваш Uri)

...