首页 > 代码库 > 本地化MIME类型与文件类型匹配
本地化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
本地化MIME类型与文件类型匹配