解决安卓系统的多媒体文件媒体标签信息乱码的方法

文档序号:6434935阅读:223来源:国知局
专利名称:解决安卓系统的多媒体文件媒体标签信息乱码的方法
解决安卓系统的多媒体文件媒体标签信息乱码的方法
技术领域
本发明涉及一种Android(安卓)系统上字符编码转换技术,尤其是对不同国家语言的多媒体文件标媒体签信息字符编码进行正确转码的技术。
背景技术
随着android (安卓)系统的不断发展和完善,目前Android平台已经成为移动互联网市场的中坚力量,市面上基于Android系统的智能手机或者平板电脑的产品不断的面世。随着用户群的不断扩大,用户在使用Android产品的过程中不断发现了原生Android系统的不足,不同厂商会根据各自对android系统定制的情况进行改善和提高。基于Android 产品目前作为移动互联网主流的终端设备,如它也逐渐承担大部分多媒体影音播放器的功能,人们可以在上面听音乐、看电影、浏览图片等,因此正确显示多媒体文件对应的媒体文件标签信息是一个必备功能。但是,我们从windows的中文操作系统下,下载下来的MP3等文件,其ID3信息(ID3信息是MP3文件中用于描述音乐信息的数据元素metadata,即多媒体文件媒体标签信息)可以正常显示,而将这些歌曲载入到Android产品后,却在列表里面显示都是乱码,无法准确定位到我们所要播放的媒体文件,如果只有少量的文件,用户可以通过切换等手段来定位所需要播放的文件,遇到大量的媒体文件,用户就无从下手。遇到这种情况,只能给用户留下很差的用户体验。那为什么在PC端可以正常显示多媒体信息的文件在Android系统上确是以乱码的方式显示出来。在此以中文系统为例分析出现这种现象的原因,在中文的操作系统上,通常电脑生成的MP3简体中文ID3标签是ID3V2. 3版本,编码是ANSI,GB2312/GBK从双字节上兼容ANSI标准。而Android是以UTF8为标准的系统就会很容易出现这个显示乱码的问题。 目前基于Android平台上开发的产品都无法较好的解决媒体信息显示乱码的问题,绝大多数的国际品牌的android设备基本上没有去解决这个问题。目前针对这个问题的解决方案如下1.用户自己用PC端的ID3编辑软件重新修改音乐标签的字符编码为UTF8 ;2. rom兼容音乐的ID3标签的部分编码类型;以上为目前常见的解决方法,方法1等于是从用户角色去解决问题,这样给用户带来极大不便,严重影响了用户体验,而且这也仅限于部分“专业“用户会知道问题所在去解决,对于绝大部分的用户来说,只能是一直面对乱码的音乐列表,忍受着痛苦的用户体验,而不知所措。方法2也大部分是由产品开发商对android系统进行简单修改,对部分常见编码类型进行识别与转换,能解决部分歌曲的乱码问题,不能满足绝大多数用户的需求。以下结合图示简单阐述一下音乐播放器获取媒体信息流程如图1所示,图1是Android系统目前音乐播放器获取歌曲信息的整个流程图。媒体扫描接收服务器MediaScarmerReceiver (Si)会在监听到任何的ACTI0N_ B00T_C0MPLETED, ACTI0N_MEDIA_M0UNTED 或 ACTION_MEDIA_SCANNER_SCAN_FIL E (intent)时候启动媒体扫描服务器MediaScarmerService (S2)进行扫描工作。所述 MediaScannerService (S2)创建媒体扫描进程MediaScanner (S3)进行一系列的文件前期处理工作,以及与媒体数据管理程序MediaProvideHS )进行交互,当扫描正式开始时,通过安卓媒体扫描模块Android_media_MediaScanner (S4)调用到媒体扫描进程 MediaScanner (S5)进行真正的媒体文件的ID3信息解析以及编码类型转换,将转换过的 ID3 信息上报到 Mediakanner (S3) ,MediaScanner (S3)通过 MediaProvider (S7)将对应的文件信息存储到数据库DataBase (S8)。当用户打开音乐播放器(对应图中的Music, apk) 后,音乐播放器通过MediaProvideHS )获取到当前系统中存储的文件信息,并将部分信息(包括文件信息如大小和ID3信息等)显示给用户,用户根据当前音乐播放器提供的列表选择对应的音频文件进行播放。从以上的框图与流程分析来看,当前的问题主要出在MediaScarmeHSS)这个模块上,只要这个模块解析出来的ID3信息能进行正确的编码识别与转码,那么音乐播放器就能得到非乱码的且编码为UTF8的ID3信息。目前Android系统在framework层对解析出来的ID3信息字符串进行编码识别与转换的流程如图2所示。图2中显示了 Mediakarmer对解析出来的ID3信息的字符串进行编码识别与转换处理的流程。图中识别时所用的默认语言mLocaleEncoding 是每次系统触发MediaScarmer进行扫描前会从图1中的S2模块在创建S3模块时设置的,并在S5模块中判断是否是当前系统提供的几种语言(如当前系统提供4种语言日文 kEncodingShift JIS、韩文 kEncodingEUCKR、简体中文 kEncodingGBK、繁体中文 kEncodingBig5)中的一种,如果是,则默认识别语言为其中的一种值,如果不是,则设置为 kEncodingNone,即对ID3信息不进行处理。文件标签字符解析模块主要完成对每个媒体文件的ID3信息进行解析,并获取到一种或多种媒体标签字符串数组Key-ValUe[],并将Key-ValUe[]提交给文件标签字符串编码初步分类模块进行处理。文件标签字符串编码初步分类模块根据当前的mLocaleEncoding值对文件标签字符解析模块上报的字符串数组进行不同的处理,当mLocaleEncoding == kEncodingNone时,直接将Key-Value[]提交给文件标签字符串处理模块处理,结束了当前文件的ID3信息处理,开始下一个文件的处理。如果mLocaleEncoding ! = kEncodingNone, 则对Key-ValUe[]字符串数组中的每组字符串进行判断,如果是ASCII码,则直接将当前 Key-Value [i]提交给文件标签字符串处理模块处理,如果不是,则将对应Key-Value [i]存入Key-ValueI 口中,待Key-Value[]中所有的字符串值都判断后,将非ASCII码的字符串组Key-ValueI []传入文件标签字符串编码识别模块进行字符编码识别。文件标签字符串编码识别模块将Key-ValueI []字符串数组中的每组字符串进行识别(只进行当前系统提供的四种编码识别),得到每组字符串可能的编码类型值(一个字符串中字符可能在几种编码类型中都有,因此可能一个字符串识别出既是中文的GBK 编码又是日文JIS编码的结果)。Key-ValueI []字符串数组中的每组字符串都识别后,取每组字符串识别类型值中的共同类型为当前Key-ValUeI[]的总识别结果。将识别结果 EncodeType传给文件标签字符串编码转换模块。文件标签字符串编码转换模块判断EncodeType值是否与mLocaleEncoding 相等,如果相等则将Key-ValueI []进行mLocaleEncoding至UTF8的编码转换得到 Key-ValueII [],再将Key-Valuell []上报给文件标签字符串处理模块处理,如果不等,则直接将Key-ValueI []上报给文件标签字符串处理模块处理。文件标签字符串处理模块将对应的音乐标签数组值往上层上报。从以上的Android系统自带的ID3信息编码识别与转换流程中,明显可以看出以下几种不足1、系统提供的可识别编码类型种类不多,如果其它编码类型如遇到俄文时,很大概率是乱码;2、系统设置为英文系统,任何非UTF8编码的ID3信息,必定乱码;3、识别方法太过苛刻,如果遇到Key-ValueI []中某一个字符串不能识别,将导致 Key-ValueI []所有字符串都不进行转码;4、编码转换方法比较死板,如果遇到中文系统里面放非中文类型的歌曲,也是很大概率出现乱码。针对以上原Android系统中ID3信息编码的识别和转码中存在的问题,本发明提出解决ID3信息出现乱码的方法,主要是添加更多区域常用字符编码的识别以及对上述文件标签字符串编码初步分类模块、文件标签字符串编码识别模块、文件标签字符串编码转换模块中的处理流程进行修改和完善,该方法不仅可用于解决ID3信息出现乱码的问题, 也可用于其它文件标签信息出现乱码的问题。

发明内容本发明要解决的技术问题,在于提供解决安卓系统的多媒体文件媒体标签信息乱码的方法,极大提高了用户对android系统的用户体验。本发明是这样实现的解决安卓系统的多媒体文件媒体标签信息乱码的方法,其特征在于包括步骤10、针对产品销售的区域,添加该地区的常用编码识别与转换;系统获取该产品主要销售区域对应添加的常用编码类型,将mLocaleEncoding赋予该区域对应的字符编码类型值;步骤20、文件标签字符解析模块对每个文件的标签信息进行解析,并获取到一种或多种文件的标签字符串数组Key-ValUe[],并将Key-ValUe[]提交给文件标签字符串编码初步分类模块进行处理;步骤30、文件标签字符串编码初步分类模块不对mLocaleEncoding进行判断,直接将文件标签字符解析模块传过来的Key-ValUe[]进行ASIIC编码的识别,如果 Key-Value[i]是ASIIC编码,直接送至文件标签字符串处理模块,将剩余Key-Value[]字符串数组中不是ASIIC编码的重新存在Key-ValueI []传给文件标签字符串编码识别模块处理;步骤40、文件标签字符串编码识别模块将Key-ValueI []字符串数组中的每组字符串进行识别,得到每组字符串可能的编码类型值,Key-ValueI []字符串数组中的每组字符串都识别后,取每组字符串识别类型值中的共同类型为当前Key-ValueI []的总识别结果,将识别结果EncodeType传给文件标签字符串编码转换模块;同时对编码类型进行优先级排名,在将Key-ValueI []中每组字符串对应的识别编码类型根据编码类型优先级进行 Key-ValueI []中每组字符串编码类型的最终确认EncodeType [];
5
步骤50、文件标签字符串编码转换模块判断文件标签字符串编码识别模块传过来的EncodeType值是否与mLocaleEncoding相等,如果相等则将Key-ValueI []进行 mLocaleEncoding 至 UTF8 的编码转换得到 Key-ValueII [],再将 Key-ValueII []上报给文件标签字符串处理模块处理;在出现文件标签字符串编码识别模块传来的编码类型 EncodeType 或 EncodeType []与 mLocaleEncoding 不符时,如果 EncodeType 或 EncodeType []对应的编码类型是唯一的时候,直接以EncodeType或EncodeType []为识别结果进行转码,如果EncodeType或EncodeType []不唯一,则根据文件标签字符串编码识别模块中的保存的识别结果各个编码的优先级选最高优先级的编码类型当作识别结果进行转换;步骤60、文件标签字符串处理模块将对应的音乐标签数组值往上层上报。进一步地,所述步骤40中,所述对编码类型进行优先级排名是将当前 Key-ValueI []的总识别结果进行记录,当发现EncodeType为kEncodingNone时,将 Key-ValueI []中字符串所识别出来的可能编码类型进行各个编码类型个数统计然后进行编码类型优先级排名,统计所得个数越多的编码类型优先级越高,但最高的是系统默认语言。或者是在出厂时进行设置出各编码类型的优先级。本发明具有如下优点根据当前系统的语言和国家设定、当前常用的字符编码类型以及对应当前系统设定的国家常用的编码类型,对音乐标签等文件进行自动字符类型识别并转换成android系统能够识别的UTF8字符编码,从而解决了绝大部分多媒体信息的乱码问题,极大提高了用户对android系统提供的音乐模块的用户体验。

下面参照附图结合实施例对本发明作进一步的说明。图1目前android系统中音乐播放器获取媒体信息流程图结构示意图。图2是现有android系统MediaScarmer编码识别转换的流程框图。图3是本发明编码识别与转码流程图。
具体实施方式请参阅图1和图3所示,本发明的在Android系统下解决文件标签信息乱码的方法,包括步骤10、针对产品销售的区域,添加该地区的常用编码识别与转换;系统获取该产品主要销售区域对应添加的常用编码类型,如添加俄文常用编码K0I8-R、IS08859、 windowl251等,将mLocaleEncoding赋予该区域对应的字符编码类型值;当在编码识别时所用的默认语言在用户设置系统语言为英文即mLocaleEncoding == kEncodingNone 时,在本发明中可通过系统获取该产品主要销售区域对应添加的常用编码类型,将 mLocaleEncoding赋予该区域对应的字符编码类型值(如在中国台湾香港地区,当用户将系统设为英语时,原android系统此时mLocaleEncoding = kEncodingNone,而本发明方法的 android 系统是)|fmLocaleEncoding = kEncodingBig5,其中 kEncodingBig5 对应的是繁体中文,因为繁体中文都为BIG5编码,主要是台湾地区创造的);步骤20、文件标签字符解析模块对每个文件的标签信息进行解析,并获取到一种或多种文件的标签字符串数组Key-ValUe[],并将Key-ValUe[]提交给文件标签字符串编码初步分类模块进行处理;步骤30、文件标签字符串编码初步分类模块不对mLocaleEncoding进行判断,直接将文件标签字符解析模块传过来的Key-ValUe[]进行ASIIC编码的识别,如果 Key-Value[i]是ASIIC编码,直接送至文件标签字符串处理模块,将剩余Key-Value[]字符串数组中不是ASIIC编码的重新存在Key-ValueI []传给文件标签字符串编码识别模块处理;步骤40、文件标签字符串编码识别模块将Key-ValueI []字符串数组中的每组字符串进行识别,得到每组字符串可能的编码类型值,比如可能是GBK(GBK编码是中国大陆制订的、等同于UCS的新的中文编码扩展国家标准)、JS、BIG5等),Key-ValueI []字符串数组中的每组字符串都识别后,取每组字符串识别类型值中的共同类型为当前Key-ValueI [] 的总识别结果,比如每组都有GBK和JS的识别结果,那么他们总识别结果是GBK和JS两种编码,将识别结果EncodeType传给文件标签字符串编码转换模块;同时对编码类型进行优先级排名,在将Key-ValueI []中每组字符串对应的识别编码类型根据编码类型优先级进行Key-ValueI 口中每组字符串编码类型的最终确认EncodeType [];该步骤中,所述对编码类型进行优先级排名可采用下述方法的任一种进行1、将当前Key-ValueI []的总识别结果进行记录,当发现EncodeType为 kEncodingNone时,将Key-ValueI []中字符串所识别出来的可能编码类型进行各个编码类型个数统计然后进行编码类型优先级排名,统计所得个数越多的编码类型优先级越高,但最高的是系统默认语言。2、在出厂时进行设置出各编码类型的优先级。步骤50、文件标签字符串编码转换模块判断文件标签字符串编码识别模块传过来的 EncodeType 值是否与 mLocaleEncoding 相等1、如果相等则将Key-ValueI []进行mLocaleEncoding至UTF8的编码转换得到 Key-Valuell □,再将Key-ValuelU]上报给文件标签字符串处理模块处理;2、在出现文件标签字符串编码识别模块传来的编码类型EncodeType或 EncodeType[]与 mLocaleEncoding 不相等时,如果 EncodeType 或 EncodeType[]对应的编码类型是唯一的时候,直接以EncodeType或EncodeType []为识别结果进行转码,如果 EncodeType或EncodeType []不唯一,则根据文件标签字符串编码识别模块中的保存的识别结果各个编码的优先级选最高优先级的编码类型当作识别结果进行转换;步骤60、文件标签字符串处理模块将对应的音乐标签数组值往上层上报。如果本发明方法用于在Android系统下解决ID3信息乱码时,所述的文件标签信息均特指ID3信息,当然,本发明并非仅适用于解决ID3信息乱码,其它文件标签信息的乱码也可解决。本发明根据当前系统的语言和国家设定、当前常用的字符编码类型以及对应当前系统设定的国家常用的编码类型,对音乐标签等文件进行自动字符类型识别并转换成 android系统能够识别的UTF8字符编码,从而解决了绝大部分多媒体信息的乱码问题,极大提高了用户对android系统提供的音乐模块的用户体验。虽然以上描述了本发明的具体实施方式
,但是熟悉本技术领域的技术人员应当理解,我们所描述的具体的实施例只是说明性的,而不是用于对本发明的范围的限定,熟悉本领域的技术人员在依照本发明的精神所作的等效的修饰以及变化,都应当涵盖在本发明的权利要求所保护的范围内。
权利要求
1.解决安卓系统的多媒体文件媒体标签信息乱码的方法,其特征在于包括步骤10、针对产品销售的区域,添加该地区的常用编码识别与转换;系统获取该产品主要销售区域对应添加的常用编码类型,将mLocaleEncoding赋予该区域对应的字符编码类型值;步骤20、文件标签字符解析模块对每个文件的标签信息进行解析,并获取到一种或多种文件的标签字符串数组Key-ValUe[],并将Key-ValUe[]提交给文件标签字符串编码初步分类模块进行处理;步骤30、文件标签字符串编码初步分类模块不对mLocaleEncoding进行判断,直接将文件标签字符解析模块传过来的Key-Value []进行ASIIC编码的识别,如果Key-Value [i] 是ASIIC编码,直接送至文件标签字符串处理模块,将剩余Key-ValUe[]字符串数组中不是 ASIIC编码的重新存在Key-ValueI []传给文件标签字符串编码识别模块处理;步骤40、文件标签字符串编码识别模块将Key-ValueI []字符串数组中的每组字符串进行识别,得到每组字符串可能的编码类型值,Key-ValueI []字符串数组中的每组字符串都识别后,取每组字符串识别类型值中的共同类型为当前Key-ValueI []的总识别结果, 将识别结果EncodeType传给文件标签字符串编码转换模块;同时对编码类型进行优先级排名,在将Key-ValueI []中每组字符串对应的识别编码类型根据编码类型优先级进行 Key-ValueI []中每组字符串编码类型的最终确认EncodeType [];步骤50、文件标签字符串编码转换模块判断文件标签字符串编码识别模块传过来的EncodeType值是否与mLocaleEncoding相等,如果相等则将Key-ValueI []进行 mLocaleEncoding 至 UTF8 的编码转换得到 Key-ValueII [],再将 Key-ValueII []上报给文件标签字符串处理模块处理;在出现文件标签字符串编码识别模块传来的编码类型 EncodeType 或 EncodeType []与 mLocaleEncoding 不符时,如果 EncodeType 或 EncodeType []对应的编码类型是唯一的时候,直接以EncodeType或EncodeType []为识别结果进行转码,如果EncodeType或EncodeType []不唯一,则根据文件标签字符串编码识别模块中的保存的识别结果各个编码的优先级选最高优先级的编码类型当作识别结果进行转换;步骤60、文件标签字符串处理模块将对应的音乐标签数组值往上层上报。
2.根据权利要求1所述的解决安卓系统的多媒体文件媒体标签信息乱码的方法,其特征在于所述步骤40中,所述对编码类型进行优先级排名是将当前Key-ValueI []的总识别结果进行记录,当发现EncodeType为kEncodingNone时,将Key-ValueI 口中字符串所识别出来的可能编码类型进行各个编码类型个数统计然后进行编码类型优先级排名,统计所得个数越多的编码类型优先级越高,但最高的是系统默认语言。
3.根据权利要求2所述的解决安卓系统的多媒体文件媒体标签信息乱码的方法,其特征在于所述步骤40中,所述对编码类型进行优先级排名是在出厂时进行设置出各编码类型的优先级。
全文摘要
本发明提供一种解决安卓系统的多媒体文件媒体标签信息乱码的方法,根据当前系统的语言和国家设定、当前常用的字符编码类型以及对应当前系统设定的国家常用的编码类型,对音乐标签等文件进行自动字符类型识别并转换成安卓(android)系统能够识别的UTF8字符编码,从而解决了绝大部分多媒体文件媒体标签信息的乱码问题,极大提高了用户对android系统提供的音乐模块的用户体验。
文档编号G06F9/45GK102508688SQ20111030275
公开日2012年6月20日 申请日期2011年9月30日 优先权日2011年9月30日
发明者陈长海 申请人:福州瑞芯微电子有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1