当前位置: 首页 > news >正文

将Uri转为文件路径

public List convertUrisToPaths(Context context, List uris) {
List paths = new ArrayList<>();
for (Uri uri : uris) {
String path = null;
// 1. 处理 file:// 类型(直接获取路径)
if (“file”.equals(uri.getScheme())) {
path = uri.getPath();
}
// 2. 处理 content:// 类型(需查询 ContentResolver)
else if (“content”.equals(uri.getScheme())) {
try (Cursor cursor = context.getContentResolver().query(
uri, null, null, null, null)) {
if (cursor != null && cursor.moveToFirst()) {
// 根据 Uri 来源分类处理
if (isMediaDocument(uri)) { // 媒体文件(相册)
String docId = DocumentsContract.getDocumentId(uri);
String[] split = docId.split("😊;
Uri contentUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
path = queryMediaStorePath(context, contentUri, split[1]);
} else if (isDownloadsDocument(uri)) { // 下载文件
String id = DocumentsContract.getDocumentId(uri);
Uri contentUri = ContentUris.withAppendedId(
Uri.parse(“content://downloads/public_downloads”),
Long.parseLong(id)
);
path = getDataColumn(context, contentUri, null, null);
} else { // 其他 ContentProvider
path = getDataColumn(context, uri, null, null);
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
if (path != null) paths.add(path);
}
return paths;
}

// 辅助方法:查询 MediaStore 路径
private String queryMediaStorePath(Context context, Uri baseUri, String id) {
String[] projection = {MediaStore.Images.Media.DATA};
String selection = MediaStore.Images.Media._ID + “=?”;
String[] selectionArgs = {id};
return getDataColumn(context, baseUri, selection, selectionArgs);
}

// 辅助方法:获取 Cursor 中的 _data 字段
private String getDataColumn(Context context, Uri uri, String selection, String[] args) {
Cursor cursor = null;
String column = MediaStore.Images.Media.DATA;
String[] projection = {column};
try {
cursor = context.getContentResolver().query(uri, projection, selection, args, null);
if (cursor != null && cursor.moveToFirst()) {
int index = cursor.getColumnIndexOrThrow(column);
return cursor.getString(index);
}
} finally {
if (cursor != null) cursor.close();
}
return null;
}

http://www.xdnf.cn/news/1096705.html

相关文章:

  • 【牛客刷题】活动安排
  • Linux流量分析:tcpdump wireshark
  • G5打卡——Pix2Pix算法
  • 【PTA数据结构 | C语言版】顺序队列的3个操作
  • 【会员专享数据】2013-2024年我国省市县三级逐年SO₂数值数据(Shp/Excel格式)
  • [论文阅读]LLMZip: Lossless Text Compression using Large Language Models
  • 【C++详解】STL-list模拟实现(深度剖析list迭代器,类模板未实例化取嵌套类型问题)
  • 文心一言4.5开源部署指南及文学领域测评
  • 【音视频】HTTP协议介绍
  • Windows 驱动程序中不同函数运行在不同的中断请求级别 (IRQL)详细的分类
  • 正点原子 文件权限
  • 聊一聊跨浏览器测试验证点梳理
  • 搜索引擎vs向量数据库:LangChain混合检索架构实战解析
  • 数据提取之bs4(BeautifuSoup4)模块与Css选择器
  • 使用Word/Excel管理需求的10个痛点及解决方案Perforce ALM
  • CMD,PowerShell、Linux/MAC设置环境变量
  • 主从IO核心
  • Transformers 和 PyTorch 的区别与安装指南
  • Flowable23手动、接收任务----------持续更新中
  • 【计算机基础理论知识】C++篇(二)
  • codeforeces Round1032 - Round 1036
  • 学习笔记(32):matplotlib绘制简单图表-数据分布图
  • Linux Vim 编辑器详解:从入门到进阶(含图示+插件推荐)
  • Java从入门到精通!第三天(数组)
  • 【threejs】第一人称视角之八叉树碰撞检测
  • 论文笔记(LLM distillation):Distilling Step-by-Step!
  • MiniGPT4源码拆解——models
  • 原生微信小程序研发,如何对图片进行统一管理?
  • 微信小程序101~110
  • UnrealEngine5游戏引擎实践(C++)