Загрузка URL-адреса моего изображения из Firebase успешно, но внутри прослушивателя выдается
Код: Выделить всё
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
Код: Выделить всё
>
Код: Выделить всё
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 context = LocalContext.current
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(image.value , onPickImage = {
if (hasPermission(context)) {
launcher.launch(
PickVisualMediaRequest(ActivityResultContracts.PickVisualMedia.ImageOnly)
)
} else {
requestLauncher.launch(permissions)
}
})
Код: Выделить всё
@Composable
fun Profile(image : String , onPickImage : () -> Unit) {
println("Profile , image : $image ")
if(image.isEmpty()) {
println("default image ")
DefaultImage(onPickImage)
}
else {
println("load image")
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()
}
)
}
}
после этого я увидел доступ к внешнему хранилищу в Android 15 на YouTube, тогда это работает, значит Я не получаю URL-адрес изображения из базы данных Firebase, но использую весь доступ к внешнему хранилищу и получаю последнее выбранное изображение, выбранное пользователем, и получаю этот URL-адрес изображения и использую его внутри своего проекта, а затем загружаю этот URL-адрес внутри 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)
}
}
)
}
Код: Выделить всё
image : https://fir-project-655c8-default-rtdb.firebaseio.comКод: Выделить всё
android.graphics.ImageDecoder$DecodeException: Failed to create image decoder with message 'unimplemented'Input contained an error.Как мы можем устранить эту ошибку?
Подробнее здесь: https://stackoverflow.com/questions/791 ... derdecodee
Мобильная версия