您的位置:首页 > 移动开发 > Android开发

Android 信息中URL地址识别问题

2014-03-13 20:14 716 查看
[b]前言
         欢迎大家我分享和推荐好用的代码段~~
声明
         欢迎转载,但请保留文章原始出处:

         CSDN:
http://www.csdn.net

         雨季o莫忧离:http://blog.csdn.net/luckkof[/b]

正文

 
在短信中存在URL识别不准确问题,包括大写字母无法识别、与中文字符相连无法识别、大写NET网址无法识别。

特别注意:Google的正则表达式是满足RFC 3987中的大部分内容。针对这个表达式的修改一方面可能会出现不满足RFC 3987规范的情况,还会影响到CTS。

在mediatek\frameworks\base\op\java\com\mediatek\op\util\DefaultPatterns.java里把Pattern.compile改为红线框起来部分:



如果是非op定制的版本,修改alps/framework/base/core/java/android/util/Patterns.java

OP01,09有定制,修改alps/mediatek/operator/OP0X/frameworks/java/com/mediatek/op/util/XXPatternsXX.java

在以上文件中寻找如下代码段:

将原文件类似代码段的尾部,替换成如下高亮所示。



可发现新增加 FILENAME_EXTENSION 定义如下。



目前这个扩展名支持mp3扩展名识别。

 

若想支持mp4,wma识别,修改如下。其他扩展名依此类推即可。

 


附上截图部分的代码段:

Pattern.compile(

                   "((?:((?i)ftp|http|https|rtsp):\\/\\/(?:(?:[a-zA-Z0-9\\$\\-\\_\\.\\+\\!\\*\\'\\(\\)"

                    + "\\,\\;\\?\\&\\=]|(?:\\%[a-fA-F0-9]{2})){1,64}(?:\\:(?:[a-zA-Z0-9\\$\\-\\_"

                    + "\\.\\+\\!\\*\\'\\(\\)\\,\\;\\?\\&\\=]|(?:\\%[a-fA-F0-9]{2})){1,25})?\\@)?)?"

                    + "((?:(?:[" + engIriChar + "][" + engIriChar + "\\-]{0,64}\\.)+"   // named host

                    + topLevelDomainStrForWebUrlExpand

                    + "|(?:(?:25[0-5]|2[0-4]" // or ip address

                    + "[0-9]|[0-1][0-9]{2}|[1-9][0-9]|[1-9])\\.(?:25[0-5]|2[0-4][0-9]"

                    + "|[0-1][0-9]{2}|[1-9][0-9]|[1-9]|0)\\.(?:25[0-5]|2[0-4][0-9]|[0-1]"

                    + "[0-9]{2}|[1-9][0-9]|[1-9]|0)\\.(?:25[0-5]|2[0-4][0-9]|[0-1][0-9]{2}"

                    + "|[1-9][0-9]|[0-9])))"

                    + "(?:\\:\\d{1,5})?)" // plus option port number

                    + "(\\/(?:(?:[" + engIriChar + "\\;\\/\\?\\:\\@\\&\\=\\#\\~"  //plus option query params

                    + "\\-\\.\\+\\!\\*\\'\\(\\)\\_])|(?:\\%[a-fA-F0-9]{2}))*"

                    + "(?:[" + goodIriChar + "]*\\." + FILENAME_EXTENSION + ")?)?",

                    Pattern.CASE_INSENSITIVE); /// M: ignore case
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息