You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用ActivityResultLauncher设置文件选择器的初始URI

解决文件选择器指定初始目录的问题

你当前使用的ActivityResultContracts.GetContent()无法支持设置初始目录,要实现这个需求,需要替换为直接构建ACTION_OPEN_DOCUMENT的Intent,并通过ActivityResultContracts.StartActivityForResult()来处理结果,具体步骤如下:

1. 修改文件选择器声明

把原来接收String类型的Launcher改成接收Intent类型:

private var filePicker: ActivityResultLauncher<Intent>? = null

2. 重新注册文件选择器

注册时使用StartActivityForResult合约,在结果回调中处理选中的文件Uri:

private fun registerFilePicker() {
    filePicker = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
        if (result.resultCode == Activity.RESULT_OK) {
            val uri = result.data?.data
            uri?.let { onPickFile(it) }
        }
    }
}

3. 构建带初始目录的打开文件方法

在打开文件选择器时,构建包含EXTRA_INITIAL_URI参数的Intent,指定你需要定位的目录Uri:

private fun openFilePicker() {
    val intent = Intent(Intent.ACTION_OPEN_DOCUMENT).apply {
        addCategory(Intent.CATEGORY_OPENABLE)
        type = "text/plain" // 仅显示txt文件,比*/*更精准
        // 替换为你要指定的目标目录Uri,需通过SAF获取的合法Uri
        putExtra(DocumentsContract.EXTRA_INITIAL_URI, yourTargetDirectoryUri)
    }
    filePicker?.launch(intent)
}

注意事项

  • yourTargetDirectoryUri必须是通过Android存储访问框架(SAF)获取的合法目录Uri,不能直接使用文件路径转换的Uri(Android 10及以上限制直接访问文件路径)。
  • 你原本的onPickFile逻辑无需修改,可直接沿用。

内容的提问来源于stack exchange,提问作者Simon W

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 16:15:27