本地化MIME类型与文件类型匹配

有这么个issue,app下载flac和ape后,点击打开,不能提示跳转到第三方的播放器。但是在Galaxy S3 (4.3),S5(4.4.2)和Tab Pro(4.4.2)上可以直接弹出默认播放器播放flac,而在Nexus 10(4.2,4.4.3)上不行。估摸着是不是三星默认安装的播放器不一样。

查看代码发现setDataAndType传过去的type有问题。flac传的是application/x-flac(前缀x好像指的是还没形成标准),而ape直接就是null了。下的天天动听,百度音乐,Google Play Music都不能匹配,倒是一个国外的播放器Poweramp Music Player可以。百度了一把发现音频都是用的audio/xxx结构。果断把前缀去掉,直接设成audio/flac和audio/ape,发现还真好用,可以提示跳转到第三方播放器。

1 String mimetype = android.webkit.MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension);
2 myIntent = new Intent(android.content.Intent.ACTION_VIEW);
3 myIntent.setDataAndType(Uri.parse("file://"+localUrl),mimetype);

MimeUtils.java是android系统封装好的,Google一把瞅了瞅源码,发现5.0.0 r1之前的版本对于flac对应的都是application/x-flac,到L才添加了audio/flac,而ape一直没添加过。用TextDiff对比了下4.4.4 r2和5.0.0 r1的文件,发现函数什么的没改,只是添加了键值对,将常用的放在前面并且不覆盖,然后也不依赖其他文件,没啥风险。所以果断把5.0.0 r1的MimeUtils.java文件拖到产品代码里面加一行ape的键值对完事。

现在就可以尽快加入市面上常用的类型了,毕竟Google更新系统没那么快,而且国内用的可能跟国外不同。这样本地化后想怎么加就怎么加,而且文件类型更新也没那么快,维护起来也方便。

源码链接:

https://android.googlesource.com/platform/libcore/+/android-4.4.4_r2.0.1/luni/src/main/java/libcore/net/MimeUtils.java

https://android.googlesource.com/platform/libcore/+/android-5.0.0_r1/luni/src/main/java/libcore/net/MimeUtils.java

时间: 2024-10-12 13:58:44

本地化MIME类型与文件类型匹配的相关文章

input file类型,文件类型的限制

input type='file'的文件类型限制:"自定义文件" "所有文件" "自定义文件":是来自accept属性的限制 直接限制input type='file'的文件类型限制,通过accept属性进行设定,多个类型用逗号分隔开,因为accept是html5的新特性,所以火狐和IE的支持就显得单薄了, 如: accept可以指定如下信息:   *.3gpp audio/3gpp, video/3gpp 3GPP Audio/Video *.

子界类型、集合类型、记录类型、文件类型

子界类型 如果我们定义一个变量i为integer类型,那么i的值在微型机系统的pascal中,使用2字节的定义表示法,取值范围为-32768-32767.而事实上,每个程序中所用的变量的值都有一个确定的范围. 例如,人的年龄一般不超过150,一个班级的学生不超过100人,一年中的月数不超过12,一月中的天数不超过31,等等. 如果我们能在程序中对所用的变量的值域作具体规定的话,就便于检查出那些不合法的数据,这就能更好地保证程序运行的正确性.而且在一定程度上还会节省内存空间. 子界类型就很好解决如

Android 中文件类型与MIME的匹配表(转)

背景介绍: MIME:全称Multipurpose Internet Mail Extensions,多功能Internet 邮件扩充服务.它是一种多用途网际邮件扩充协议,在1992年最早应用于电子邮件系统,但后来也应用到浏览器.MIME类型就是设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器会自动使用指定应用程序来打开.多用于指定一些客户端自定义的文件名,以及一些媒体文件打开方式. 在Android中通过文件的MIME类型来判断有哪些应用程序可以处理这些文

一天一个linux基础命令之查看文件类型file

file 查看文件类型 1.命令格式 file [options]  FILE ... 2.命令功能 该命令用来识别文件类型,也可用来辨别一些文件的编码格式.它是通过查看文件的头部信息来获取文件类型. 3.常用参数 -b:只列出文件辨识结果,不显示文件名称. -f:查看文件中的文件名的文件类型,一般用于shell编程 -i:以mime类型来显示文件的类型 -z:尝试去解读压缩文件的内容 -F:使用指定分隔符号替换输出文件名后的默认的":"分隔符. -L:查看对应软链接对应文件的文件类型

获取pe文件的文件类型

工程文件petype.cpp通过调用pefile类中的函数获取文件类型. 文件类型的判断通过5个监测点完成. 监测点1:dos头的e_magic 监测点2:nt头的Signature 监测点3:文件头的Characteristics 监测点4:可选头的Magic 监测点5:可选头的Subsystem 通过监测点1和2判断是否是pe文件: 通过监测点3判断文件是否是动态库文件 通过监测点4判断文件是pe32还是pe32+还是rom映像 通过监测点5判断文件是否是0环可执行文件[驱动文件],还是3环

NSLog占位符、常见文件类型、转义字符

[Objective-C常见的文件类型] 文件类型 说明 .m OC源码文件 .h 头文件 .c C源码文件 .cc C++源码文件 .mm OC++源码文件 [转义字符] 字符 说明 \b 退格 \t 制表 \r 回车 \t 水平制表 \v 垂直制表 \\ 反斜杠 [Format占位符,常用的加粗斜线表示] 占位符 说明 %@ 格式化对象 %i 格式化整数,包含负数 %p 指针 %f 浮点数float %e 浮点数的科学计数法 %g 浮点数 %u 无符整形 unsigned int %hi 格

【转】每天一个linux命令(24):Linux文件类型与扩展名

原文网址:http://www.cnblogs.com/peida/archive/2012/11/22/2781912.html Linux文件类型和Linux文件的文件名所代表的意义是两个不同的概念.我们通过一般应用程序而创建的比如file.txt.file.tar.gz ,这些文件虽然要用不同的程序来打开,但放在Linux文件类型中衡量的话,大多是常规文件(也被称为普通文件). 一. 文件类型 Linux文件类型常见的有:普通文件.目录文件.字符设备文件和块设备文件.符号链接文件等,现在我

Linux文件类型与扩展名

Linux文件类型和Linux文件的文件名所代表的意义是两个不同的概念.我们通过一般应用程序而创建的比如file.txt.file.tar.gz ,这些文件虽然要用不同的程序来打开,但放在Linux文件类型中衡量的话,大多是常规文件(也被称为普通文件). 一. 文件类型 Linux文件类型常见的有:普通文件.目录文件.字符设备文件和块设备文件.符号链接文件等,现在我们进行一个简要的说明. 1. 普通文件 我们用 ls -lh 来查看某个文件的属性,可以看到有类似-rwxrwxrwx,值得注意的是

5 个在 Linux 中管理文件类型和系统时间的有用命令

对于想学习 Linux 的初学者来说要适应使用命令行或者终端可能非常困难.由于终端比图形用户界面程序更能帮助用户控制 Linux 系统,我们必须习惯在终端中运行命令.因此为了有效记忆 Linux 不同的命令,你应该每天使用终端并明白怎样将命令和不同选项以及参数一同使用. 在 Linux 中管理文件类型和设置时间 请先查看我们 Linux 小技巧系列之前的文章: 5 个有趣的 Linux 命令行技巧 给新手的 10 个有用 Linux 命令行技巧 在这篇文章中,我们打算看看终端中 5 个和文件以及