从jetpack compose中的文件管理器获取文件路径- androidKotlin

bnl4lu3b  于 2022-12-23  发布在  Kotlin
关注(0)|答案(1)|浏览(367)

我想要的路径,用户在文件管理器中指出的csv文件。
现在它打开文件管理器,但我不知道如何从这个文件路径。

@Composable
fun screen(){
    val intent = Intent(Intent.ACTION_GET_CONTENT)
    intent.type = "*text/csv*"
    intent.addCategory(Intent.CATEGORY_OPENABLE)

    val launcher = rememberLauncherForActivityResult(ActivityResultContracts.StartActivityForResult()){ }

    Button(onClick = {
        launcher.launch(intent)
    }) {
        Text(text = "Take a file")
    }
}
abithluo

abithluo1#

您要调用的rememberLauncherForActivityResult函数有两个参数,第一个是您要使用的约定,在您的示例中为ActivityResultContracts.StartActivityForResult,第二个是onResult回调,它将在已启动的Activity完成后调用。你应该使用它给你的ActivityResult。它包含结果代码和数据-你可以从数据中得到文件路径,它看起来像这样:

val launcher = rememberLauncherForActivityResult(
    contract = ActivityResultContracts.StartActivityForResult()
) { activityResult ->
    if (activityResult.resultCode == Activity.RESULT_OK) {
        val uri: Uri? = activityResult.data?.data
    }
}

此外,您应该检查ActivityResultContracts.GetContent,这将简化您的工作-使用此契约,您将在回调中直接接收Uri?

相关问题