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

【Android】根据URI获取文件扩展名或MimeType

关于安卓中的URI

安卓中的URI包含多种格式,可以是文件,可以是媒体库资源,可以是Resource

也可以是网络地址,或其它资源标识

这里我们主要针对文件来源的URI

安卓中通过URI访问文件主要包括三种方式

  • 文件路径
  • 媒体库资源(背后仍然是文件,但无法直接访问)
  • Resource资源

对于这三种不同的格式,我们要分别采取不同的解析方式

提取文件扩展名和MimeType
object UriCompat {const val SCHEME_HTTP = "http"const val SCHEME_HTTPS = "https"fun Uri.getExtensionName(): String {val context = getAppContext()val typeMap = MimeTypeMap.getSingleton()when (scheme) {ContentResolver.SCHEME_FILE -> {val url = Uri.fromFile(File(path)).toString()return MimeTypeMap.getFileExtensionFromUrl(url)}ContentResolver.SCHEME_CONTENT -> {val type = context.contentResolver.getType(this)return typeMap.getExtensionFromMimeType(type).orEmpty()}ContentResolver.SCHEME_ANDROID_RESOURCE -> {val retriever = MediaMetadataRetriever()retriever.setDataSource(context, this)val type = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_MIMETYPE)return typeMap.getExtensionFromMimeType(type).orEmpty()}SCHEME_HTTP,SCHEME_HTTPS -> return ""else -> return ""}}fun Uri.getMimeType(): String {return MimeTypeMap.getSingleton().getMimeTypeFromExtension(getExtensionName()).orEmpty()}
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Android SurfaceFlinger——共享内存读写流程(五十五)
  • 探索微服务架构中的动态服务发现与调用:使用 Nacos 与 Spring Cloud OpenFeign 打造高效订单管理系统
  • 如何将 Parallels Desktop 许可证密钥移至新的 Mac?
  • Android 获取通话记录
  • 【Verilog 数字系统设计教程】Verilog 基础:硬件描述语言入门指南
  • 登录校验组件 Spring Security OAuth2 详解
  • 【CVPR‘24】BP-Net:用于深度补全的双边传播网络,新 SOTA!
  • IOS 17 基于UITabBarController实现首页TabBar
  • 在URL链接中指定浏览器跳转到PDF文件的指定页码
  • python计算机视觉——第四章 照相机模型与增强现实
  • OpenCV绘图函数(8)填充凸多边形函数fillConvexPoly()的使用
  • 基于 Householder 变换的 qr 分解 算法与源码实现
  • sdk监控平台
  • 14.JS学习篇-CSR和SSR
  • golang并发编程——概述
  • (十五)java多线程之并发集合ArrayBlockingQueue
  • Django 博客开发教程 16 - 统计文章阅读量
  • hadoop集群管理系统搭建规划说明
  • JavaScript设计模式之工厂模式
  • magento 货币换算
  • MySQL Access denied for user 'root'@'localhost' 解决方法
  • MySQL常见的两种存储引擎:MyISAM与InnoDB的爱恨情仇
  • Node.js 新计划:使用 V8 snapshot 将启动速度提升 8 倍
  • RxJS: 简单入门
  • Webpack 4 学习01(基础配置)
  • 对JS继承的一点思考
  • 蓝海存储开关机注意事项总结
  • 理解IaaS, PaaS, SaaS等云模型 (Cloud Models)
  • 聊聊directory traversal attack
  • 通过几道题目学习二叉搜索树
  • 与 ConTeXt MkIV 官方文档的接驳
  • JavaScript 新语法详解:Class 的私有属性与私有方法 ...
  • ​520就是要宠粉,你的心头书我买单
  • ​LeetCode解法汇总1276. 不浪费原料的汉堡制作方案
  • ###项目技术发展史
  • #Spring-boot高级
  • (2)(2.10) LTM telemetry
  • (C#)一个最简单的链表类
  • (PHP)设置修改 Apache 文件根目录 (Document Root)(转帖)
  • (zt)基于Facebook和Flash平台的应用架构解析
  • (机器学习的矩阵)(向量、矩阵与多元线性回归)
  • (六)什么是Vite——热更新时vite、webpack做了什么
  • (转)Mysql的优化设置
  • (转)清华学霸演讲稿:永远不要说你已经尽力了
  • .env.development、.env.production、.env.staging
  • .gitattributes 文件
  • .net 连接达梦数据库开发环境部署
  • .net 提取注释生成API文档 帮助文档
  • .NET 中 GetHashCode 的哈希值有多大概率会相同(哈希碰撞)
  • .NET/C# 在代码中测量代码执行耗时的建议(比较系统性能计数器和系统时间)
  • .NET+WPF 桌面快速启动工具 GeekDesk
  • .net连接oracle数据库
  • 。Net下Windows服务程序开发疑惑
  • //usr/lib/libgdal.so.20:对‘sqlite3_column_table_name’未定义的引用
  • /var/log/cvslog 太大