我正在将一个大型天文应用程序迁移到 Jetpack Compose。已经成功采取了几个复杂的步骤(迁移房间数据库、OpenGL 视图和渲染器、几个复杂的屏幕等)
但是,我无法实现从外部存储读取图像的基本功能。
我正在使用:
Android 10
READ_EXTERNAL_STORAGE is in the Manifest file
Accompanist permission : implementation "com.google.accompanist:accompanist-permissions:0.29.1-alpha"
Coil: implementation "io.coil-kt:coil-compose:2.2.2"
在这个测试可组合函数中,外部存储目录是可以访问的。该文件存在且大小正确,checkSelfPermission 测试结果授予权限。
但是文件不可读(图像是空的)
我可能遗漏了一些非常简单的东西,但几个小时后,我别无选择,非常感谢您的帮助。
@OptIn(ExperimentalMaterialApi::class, ExperimentalPermissionsApi::class)
@Composable
fun SheetContent() {
val context = LocalContext.current
val readExternalMemoryState = rememberPermissionState(
Manifest.permission.READ_EXTERNAL_STORAGE
)
if (readExternalMemoryState.status.isGranted) {
Text("Read External memory permission Granted")
} else {
AskPermission(permissionState = readExternalMemoryState)
}
val path = Environment.getExternalStorageDirectory().toString() + "/Download/"
val file = File(path + "solar-system.png")
val filesize = file.length()
if (file.exists()) {
Text("File exist with size: $filesize")
when (ContextCompat.checkSelfPermission(context, Manifest.permission.READ_EXTERNAL_STORAGE
)) {
PackageManager.PERMISSION_GRANTED -> {
//File read logic here
Text("checkSelfPermission gives status: Granted")
if (file.canRead()) {
Text("File can be read")
Image(
rememberAsyncImagePainter(file),
contentDescription = ""
)
} else {
Text("File not readable")
}
}
}
} else {
Text("Not available")
}
}
输出:
Read External memory permission Granted
File exist with size: 20534
checkSelfPermission gives status: Granted
File not readable
试试这个下载目录路径:
val downloadDirectory = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS)