【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()}
}