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

在Android平台的.NET MAUI中如何获取文件绝对路径?

Android 文件选择器获取缓存路径的替代方案

不用复制文件也能直接操作目标文件,核心是利用Content URI而非依赖缓存路径,以下是具体实现方式:

1. 直接通过 Content URI 操作文件

文件选择器(如系统的 ACTION_GET_CONTENT 或第三方库)返回的其实是目标文件的 Content URI(格式为 content://...),而非必须拿到真实路径。你可以直接通过 ContentResolver 对这个 URI 进行读写操作,完全不需要复制文件:

// 从选择器返回的 Intent 中获取 Content URI
val fileUri = intent.data ?: return

// 直接打开输入流读取文件
context.contentResolver.openInputStream(fileUri)?.use { inputStream ->
    // 在这里处理文件流,比如解析、上传等
}

如果需要将文件传递给其他组件(如分享、上传到服务器),直接传递这个 URI 即可,注意要给目标组件授予临时访问权限:

val shareIntent = Intent(Intent.ACTION_SEND).apply {
    putExtra(Intent.EXTRA_STREAM, fileUri)
    // 授予临时读取权限
    addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
    type = context.contentResolver.getType(fileUri)
}
startActivity(Intent.createChooser(shareIntent, "分享文件"))

2. 获取持久化访问权限

如果需要在应用重启后仍能访问该文件,可以调用 takePersistableUriPermission 保留权限:

val takeFlags = intent.flags and (Intent.FLAG_GRANT_READ_URI_PERMISSION or Intent.FLAG_GRANT_WRITE_URI_PERMISSION)
context.contentResolver.takePersistableUriPermission(fileUri, takeFlags)

注意:使用这个方法需要在文件选择时添加 Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION 标记,并且确保你的应用已申请必要的权限(Android 10+ 无需额外申请外部存储权限,旧版本需申请 READ_EXTERNAL_STORAGE)。

3. 配置第三方文件选择器库返回原始 URI

如果你使用的是第三方文件选择器库,部分库默认会复制文件到缓存目录并返回缓存路径。可以查看库的配置项,开启直接返回 Content URI 的功能,比如:

  • 某些库支持设置 returnContentUri = true
  • 或者禁用自动复制文件的选项,避免生成无用的缓存文件

内容的提问来源于stack exchange,提问作者Sh.sh94

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 21:32:09