繁体   English   中英

如何在 Kotlin Jetpack Compose 中使用 rememberLauncherForActivityResult 读取文件?

[英]How to read a file using rememberLauncherForActivityResult in Kotlin Jetpack Compose?

所以我有这个可组合的,它试图从存储中读取数据,

@Composable
private fun Screen() {
    val launcher = rememberLauncherForActivityResult(contract = ActivityResultContracts.StartActivityForResult()) { result ->
        val uri = result.data?.data.toString()
        if(uri !== null) {
            val file = File(uri)
            val bytes = file.readBytes()
            println(bytes)
        }
    }
    Column() {
        Button(onClick = {
            val intent = Intent().setType("*/*").setAction(Intent.ACTION_OPEN_DOCUMENT)
            launcher.launch(intent)
        }) {
            Text("Open file")
        }
    }
}

但是,它给了我这个错误: content:/com.android.providers.downloads.documents/document/raw%3A%2Fstorage%2Femulated%2F0%2FDownload%2FIMG_CEFEFF486A8C-1.jpeg: open failed: ENOENT (No such file or directory) 我在这里做错了什么? 请帮忙。

弄清楚了,

@Composable
private fun Screen() {
    val context = LocalContext.current
    
    val launcher = rememberLauncherForActivityResult(contract = ActivityResultContracts.GetContent()) { result ->
        val item = context.contentResolver.openInputStream(result)
        val bytes = item?.readBytes()
        println(bytes)
        item?.close()
    }

    return Column {
        Button(onClick = {
            launcher.launch("*/*")
        }) {
            Text("Open file")
        }
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM