本地化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

 

转载于:https://www.cnblogs.com/RussellWestbrook/p/4110001.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值