码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2014-11-20 11:53:05      阅读:571      评论:0      收藏:0      [点我收藏+]

标签:android   style   blog   http   io   ar   color   sp   java   

      有这么个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类型与文件类型匹配

标签:android   style   blog   http   io   ar   color   sp   java   

原文地址:http://www.cnblogs.com/RussellWestbrook/p/4110001.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!