首页 > 其他分享 >【Android】根据URI获取文件扩展名或MimeType

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

时间:2024-08-31 20:58:06浏览次数:11  
标签:MimeType 文件 return val URI Android SCHEME type

关于安卓中的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()
    }
}

标签:MimeType,文件,return,val,URI,Android,SCHEME,type
From: https://blog.csdn.net/u013718730/article/details/141630213

相关文章

  • Android开发 - ClassLoader 加载外部类解析
    ClassLoader是什么ClassLoader主要作用是将字节码文件(.class文件)加载到Java虚拟机(JVM)中,以便应用程序可以使用这些类ClassLoader的好处模块化加载:应用程序可能由多个模块组成,而这些模块可能需要按需加载插件机制:很多应用支持插件化,插件在安装或更新后需要动态加载......
  • 基于live555开发的多线程RTSPServer轻量级流媒体服务器EasyRTSPServer开源代码及其调
    EasyRTSPServer参考live555testProg中的testOnDemandRTSPServer示例程序,将一个live555testOnDemandRTSPServer封装在一个类中,例如,我们称为ClassEasyRTSPServer,在EasyRTSPServer_Create接口调用时,我们新建一个EasyRTSPServer对象,再通过调用EasyRTSPServer_Startup接口,将EasyRTSP......
  • 基于ssm+vue基于Android的大学校园车辆管理系统前【开题+程序+论文】
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着高校规模的不断扩大和师生人数的持续增长,大学校园内的车辆管理成为了一个日益严峻的问题。传统的人工管理方式不仅效率低下,而且难以应对日益复杂......
  • FIT1047 Introduction to computer systems, networks and security
    FACULTYOFINFORMATIONTECHNOLOGYFIT1047Introductiontocomputersystems,networksandsecurity–S22024Assignment2–ProcessesandMARIEProgrammingPurposeProcessesandprogramsarewhatmakecomputersdowhatwewantthemtodo.Inthefirstp......
  • Android源码bta_gattc_start_discover剖析
    1.前言当BLE设备作为GATT客户端(GATTClient)连接到GATT服务器(GATTServer)后,它通常需要执行发现过程以了解服务器的GATT数据库结构。这包括服务(Services)、特征(Characteristics)和描述符等。bta_gattc_start_discover 函数正是用于启动这一过程的。2.工作流程连接建立:首先,GAT......
  • Android系统给所有apk默认权限
        Android系统的定制开发中,经常会有客户要求赋予他们提供的应用程序(APK)所默认的所有权限;百度上有多种版本可以给与默认权限,但是经过博主试验,都是比较复杂麻烦的操作;在这里博主给出一个简单方便方法,直接上代码;---a/frameworks/base/services/core/java/com/android/......
  • 在Android开发中,如何使用SharedPreferences(简称SP)一个轻量级的数据存储方式
    目录全局SharedPreferences工具类代码说明:如何使用这个工具类?在Android开发中,SharedPreferences(简称SP)是一个轻量级的数据存储方式,常用于保存应用的配置信息或少量的数据。为了便于在全局使用,可以将其封装到一个工具类中。以下是一个带有详细中文注释的全局SharedPrefere......
  • Android的UI设计与布局
    目录Android布局系统概述常见的布局控件常见UI组件自适应布局和屏幕适配主题和样式 总结在Android中,UI设计与布局是开发过程中非常重要的一部分,直接决定了用户与应用的交互体验。Android提供了多种布局控件和UI组件,帮助开发者设计出不同风格和功能的界面。A......
  • Spring Security基于token的极简示例
    1引言SpringSecurity是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架,但是用起来有点复杂,为了便于学习理解,下面将用最简洁的配置和示例,展示整个流程。2代码创建一个spring-security-demo的项目,总共包含5个文件2.1pom.xml引入spri......
  • Android 11 About SleepToken / (Settings)Screen timeout
    AndroidR激活Settings里面的息屏休眠,最前台运行的Activity生命周期->onPause->onStopadbshelldumpsyswindowpolicy//获取PhoneWindowManager的dump信息...bootCompleted=truescreenState=SCREEN_STATE_ON/SCREEN_STATE_OFFinteractiveState=INTERACTIVE_STATE_AW......