我如何解析Uri字符串加载图像从画廊在jetpack组成与线圈?



假设我有图像组件可以显示从图库中选择的图像;

@Composable
fun ClickableToGalleryImage() {
var imageUri by remember {
mutableStateOf<Uri?>(null)
}
val launcher = rememberLauncherForActivityResult(
contract = ActivityResultContracts.GetContent()
) { uri: Uri? ->
println(imageUri)
imageUri = uri
}
Box(
modifier = Modifier.fillMaxSize(),
contentAlignment = Alignment.Center
) {
Image(
painter = rememberAsyncImagePainter(
ImageRequest
.Builder(LocalContext.current)
.data(data = imageUri)
.build()
),
contentDescription = null,
modifier = Modifier
.clickable { launcher.launch("image/*") }
.size(100.dp)
.clip(CircleShape)
.border(2.dp, Color.Gray, CircleShape),
contentScale = ContentScale.Crop
)
}
}

这个工作很好。

但是如果我提取imageUri值;

I/System.out: content://com.android.providers.media.documents/document/image%3A33

并手动键入imageUri变量;

Image(
painter = rememberAsyncImagePainter(
ImageRequest
.Builder(LocalContext.current)
.data(data = "content://com.android.providers.media.documents/document/image%3A33")
.build()
),
contentDescription = null,
modifier = Modifier
.size(100.dp)
.clip(CircleShape)
.border(2.dp, Color.Gray, CircleShape),
contentScale = ContentScale.Crop
)

线圈无法加载图片。为什么呢?我怎么能显示图片从画廊与uri?

线圈无法加载图片。为什么呢?

您没有读权限访问该内容。

我怎么能显示图片从画廊与uri?

使用您从ActivityResultContracts.GetContent请求中获得的Uri,在您请求它的同一活动中

如果您需要持久访问内容,请切换到OpenDocument并在ContentResolver上调用takePersistableUriPermission(),提供Uri

最新更新