На самом деле основная цель моего вопроса — как отобразить URI изображения, хранящегося в Firebase (либо база данных, база данных реального времени, хранилище) в AsyncImage().
Загрузка URI моего изображения из базы данных Firebase, базы данных реального времени или хранилища Firebase успешно, но внутри прослушивателя AsyncImage() он выдает
java.lang.SecurityException: Calling uid ( 10213 ) does not have permission to access picker uri: content://media/picker/0/com.android.providers.media.photopicker/media/1000000020
в моем AndroidManifest.xml
>
AsyncImage(
model = ImageRequest.Builder(LocalContext.current)
.listener(
onError = { request, result ->
// error come here -------------->.......
println(result.throwable)
}
)
.data(image.toUri())
.build(),
contentDescription = null,
contentScale = ContentScale.Crop,
modifier = Modifier
.size(90.dp)
.clip(CircleShape)
.clickable {
onPickImage()
}
)
внутри AsyncImage() означает, что изображение не может отображаться из-за исключения java.lang.SecurityException, когда я перезапускаю свое приложение.
после этого я увидел доступ внешнее хранилище в Android 15 на YouTube, тогда оно работает, означает, что я не получаю URI изображения из базы данных Firebase, но я использую весь доступ к внешнему хранилищу (все изображения галереи) и получаю последнее выбранное изображение, которое выбирает пользователь, и получаю этот URI изображения и использовать внутри моего проекта, а затем загрузить этот URI внутри AsynImage().
но я хочу использовать Firebase, поэтому я пытаюсь сохранить изображение в базе данных реального времени Firebase
он успешно сохраняется и также успешно извлекается
fun loadUserImage(
onLoadImage : (String) -> Unit ,
onLoadImageError : (String) -> Unit
){
database.getReference().child(currentFileName)
.addValueEventListener(
object : ValueEventListener {
override fun onDataChange(snapshot: DataSnapshot) {
currentImage = snapshot.ref.toString()
println("snapshot : ${snapshot.value} , image : $currentImage")
onLoadImage(currentImage)
}
override fun onCancelled(error: DatabaseError) {
onLoadImageError(error.message)
}
}
)
}
Внутри onLoadImage я получаю URL-адрес изображения, например
image : https://fir-project-655c8-default-rtdb.firebaseio.com
затем внутри прослушивателя AsynImage() я также получил ошибку, и изображение не загружается при переустановке приложения
android.graphics.ImageDecoder$DecodeException: Failed to create image decoder with message 'unimplemented'Input contained an error.
Я прочитал много ответов, но они устарели и в основном написаны на Java.
Как мы можем устранить эту ошибку?
Редактировать:
На самом деле я выбираю изображение и отображаю изображение в своем приложении успешно, без ошибок, а затем сохраняю URL-адрес этого изображения в базе данных Firebase, и когда я повторно запускаю приложение, я загружаю URL-адрес этого изображения из база данных Firebase. затем отображается java.lang.SecurityException, а адрес изображения имеет вид
content://media/picker/0/com.android.providers.media.photopicker/media. и если я сохраню изображение в хранилище Firebase, а затем загружу это изображение после повторного запуска приложения, тогда оно выдаст android.graphics.ImageDecoder$DecodeException, а адрес изображения будет выглядеть как https://fir-project-655c8-default-rtdb.firebaseio.com . ? и я не хочу использовать onActivityResult(), потому что они устарели. Мне нужна альтернатива, которая не обесценивается. и у меня есть все разрешения
fun hasPermission(context: Context): Boolean {
return when {
Build.VERSION.SDK_INT >= 33 -> ContextCompat.checkSelfPermission(
context, Manifest.permission.READ_MEDIA_IMAGES
) == PackageManager.PERMISSION_GRANTED
else -> ContextCompat.checkSelfPermission(
context, Manifest.permission.READ_EXTERNAL_STORAGE
) == PackageManager.PERMISSION_GRANTED
}
}
val requestLauncher = rememberLauncherForActivityResult(
contract = ActivityResultContracts.RequestMultiplePermissions()
) { permissions ->
if (permissions[Manifest.permission.READ_MEDIA_IMAGES] == true) {
Toast.makeText(context, "Gallery permission enabled", Toast.LENGTH_LONG).show()
} else {
val rationaleRequired = when {
Build.VERSION.SDK_INT >= 33 -> {
ActivityCompat.shouldShowRequestPermissionRationale(
context as Activity, Manifest.permission.READ_MEDIA_IMAGES
)
}
else -> {
ActivityCompat.shouldShowRequestPermissionRationale(
context as Activity, Manifest.permission.READ_EXTERNAL_STORAGE
)
}
}
val message = if (rationaleRequired) {
"Gallery permission is required for updating your profile."
} else {
"Gallery permission is required. Please enable it manually in settings."
}
Toast.makeText(context, message, Toast.LENGTH_LONG).show()
}
}
val permissions = remember {
if (Build.VERSION.SDK_INT >= 33) {
arrayOf(
Manifest.permission.READ_MEDIA_AUDIO,
Manifest.permission.READ_MEDIA_VIDEO,
Manifest.permission.READ_MEDIA_IMAGES
)
} else {
arrayOf(Manifest.permission.READ_EXTERNAL_STORAGE)
}
}
Profile(userImageBoard.value) {
if (Constants.hasPermission(context)) {
launcher.launch(
PickVisualMediaRequest(ActivityResultContracts.PickVisualMedia.ImageOnly)
)
} else {
requestLauncher.launch(permissions)
}
}
Подробнее здесь: https://stackoverflow.com/questions/791 ... derdecodee
Android 15: java.lang.SecurityException, android.graphics.ImageDecoder$DecodeException в котлине [дубликат] ⇐ Android
Форум для тех, кто программирует под Android
1731911586
Anonymous
На самом деле основная цель моего вопроса — как отобразить URI изображения, хранящегося в Firebase (либо база данных, база данных реального времени, хранилище) в AsyncImage().
Загрузка URI моего изображения из базы данных Firebase, базы данных реального времени или хранилища Firebase успешно, но внутри прослушивателя AsyncImage() он выдает
java.lang.SecurityException: Calling uid ( 10213 ) does not have permission to access picker uri: content://media/picker/0/com.android.providers.media.photopicker/media/1000000020
в моем AndroidManifest.xml
>
AsyncImage(
model = ImageRequest.Builder(LocalContext.current)
.listener(
onError = { request, result ->
// error come here -------------->.......
println(result.throwable)
}
)
.data(image.toUri())
.build(),
contentDescription = null,
contentScale = ContentScale.Crop,
modifier = Modifier
.size(90.dp)
.clip(CircleShape)
.clickable {
onPickImage()
}
)
внутри AsyncImage() означает, что изображение не может отображаться из-за исключения java.lang.SecurityException, когда я перезапускаю свое приложение.
после этого я увидел доступ внешнее хранилище в Android 15 на YouTube, тогда оно работает, означает, что я не получаю URI изображения из базы данных Firebase, но я использую весь доступ к внешнему хранилищу (все изображения галереи) и получаю последнее выбранное изображение, которое выбирает пользователь, и получаю этот URI изображения и использовать внутри моего проекта, а затем загрузить этот URI внутри AsynImage().
но я хочу использовать Firebase, поэтому я пытаюсь сохранить изображение в базе данных реального времени Firebase
он успешно сохраняется и также успешно извлекается
fun loadUserImage(
onLoadImage : (String) -> Unit ,
onLoadImageError : (String) -> Unit
){
database.getReference().child(currentFileName)
.addValueEventListener(
object : ValueEventListener {
override fun onDataChange(snapshot: DataSnapshot) {
currentImage = snapshot.ref.toString()
println("snapshot : ${snapshot.value} , image : $currentImage")
onLoadImage(currentImage)
}
override fun onCancelled(error: DatabaseError) {
onLoadImageError(error.message)
}
}
)
}
Внутри onLoadImage я получаю URL-адрес изображения, например
image : https://fir-project-655c8-default-rtdb.firebaseio.com
затем внутри прослушивателя AsynImage() я также получил ошибку, и изображение не загружается при переустановке приложения
android.graphics.ImageDecoder$DecodeException: Failed to create image decoder with message 'unimplemented'Input contained an error.
Я прочитал много ответов, но они устарели и в основном написаны на Java.
Как мы можем устранить эту ошибку?
Редактировать:
На самом деле я выбираю изображение и отображаю изображение в своем приложении успешно, без ошибок, а затем сохраняю URL-адрес этого изображения в базе данных Firebase, и когда я повторно запускаю приложение, я загружаю URL-адрес этого изображения из база данных Firebase. затем отображается java.lang.SecurityException, а адрес изображения имеет вид
content://media/picker/0/com.android.providers.media.photopicker/media. и если я сохраню изображение в хранилище Firebase, а затем загружу это изображение после повторного запуска приложения, тогда оно выдаст android.graphics.ImageDecoder$DecodeException, а адрес изображения будет выглядеть как https://fir-project-655c8-default-rtdb.firebaseio.com . ? и я не хочу использовать onActivityResult(), потому что они устарели. Мне нужна альтернатива, которая не обесценивается. и у меня есть все разрешения
fun hasPermission(context: Context): Boolean {
return when {
Build.VERSION.SDK_INT >= 33 -> ContextCompat.checkSelfPermission(
context, Manifest.permission.READ_MEDIA_IMAGES
) == PackageManager.PERMISSION_GRANTED
else -> ContextCompat.checkSelfPermission(
context, Manifest.permission.READ_EXTERNAL_STORAGE
) == PackageManager.PERMISSION_GRANTED
}
}
val requestLauncher = rememberLauncherForActivityResult(
contract = ActivityResultContracts.RequestMultiplePermissions()
) { permissions ->
if (permissions[Manifest.permission.READ_MEDIA_IMAGES] == true) {
Toast.makeText(context, "Gallery permission enabled", Toast.LENGTH_LONG).show()
} else {
val rationaleRequired = when {
Build.VERSION.SDK_INT >= 33 -> {
ActivityCompat.shouldShowRequestPermissionRationale(
context as Activity, Manifest.permission.READ_MEDIA_IMAGES
)
}
else -> {
ActivityCompat.shouldShowRequestPermissionRationale(
context as Activity, Manifest.permission.READ_EXTERNAL_STORAGE
)
}
}
val message = if (rationaleRequired) {
"Gallery permission is required for updating your profile."
} else {
"Gallery permission is required. Please enable it manually in settings."
}
Toast.makeText(context, message, Toast.LENGTH_LONG).show()
}
}
val permissions = remember {
if (Build.VERSION.SDK_INT >= 33) {
arrayOf(
Manifest.permission.READ_MEDIA_AUDIO,
Manifest.permission.READ_MEDIA_VIDEO,
Manifest.permission.READ_MEDIA_IMAGES
)
} else {
arrayOf(Manifest.permission.READ_EXTERNAL_STORAGE)
}
}
Profile(userImageBoard.value) {
if (Constants.hasPermission(context)) {
launcher.launch(
PickVisualMediaRequest(ActivityResultContracts.PickVisualMedia.ImageOnly)
)
} else {
requestLauncher.launch(permissions)
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79197375/android-15-java-lang-securityexception-android-graphics-imagedecoderdecodee[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия