英语下 信息内容中的号码不能识别(如10086)中文下可以识别10086
關於這個現象是google對於數字的判斷考慮到了國家的屬性
在Linkify.java中對於電話號碼的識別方法 MR2/KK 後已經由原本單純的
public static final Pattern PHONE
= Pattern.compile( // sdd = space, dot, or dash
"(\\+[0-9]+[\\- \\.]*)?" // +<digits><sdd>*
+ "(\\([0-9]+\\)[\\- \\.]*)?" // (<digits>)<sdd>*
+ "([0-9][0-9\\- \\.]+[0-9])"); // <digit><digit|sdd>+<digit>
改成用
Iterable<PhoneNumberMatch> matches = phoneUtil.findNumbers(s.toString(),
Locale.getDefault().getCountry(), Leniency.POSSIBLE, Long.MAX_VALUE);
所以判斷變得更加嚴謹,如10086在簡體中文下可以識別,但在英文就無法識別
但如果都是亂打的如12345則是無法識別。
如果客户一定要修改成号码在任何语言下都能识别,唯一的辦法就是把判斷電話號碼的CODE恢復為4.4之前(不要根據國家判斷)
把 Linkify.java 中的 addLinks() 中的這段
if ((mask & PHONE_NUMBERS) != 0) {
gatherTelLinks(links, text);
}
改為
if ((mask & PHONE_NUMBERS) != 0) {
gatherLinks(links, text, Patterns.PHONE,
new String[] { "tel:" },
sPhoneNumberMatchFilter, sPhoneNumberTransformFilter);
}
这样修改只是號碼的判斷不分國家了
不過若不修改個話 雖然有問題 但至少所有的行為會和androdi 4.4 一樣
所以还请客户自行考量。
關於這個現象是google對於數字的判斷考慮到了國家的屬性
在Linkify.java中對於電話號碼的識別方法 MR2/KK 後已經由原本單純的
public static final Pattern PHONE
= Pattern.compile( // sdd = space, dot, or dash
"(\\+[0-9]+[\\- \\.]*)?" // +<digits><sdd>*
+ "(\\([0-9]+\\)[\\- \\.]*)?" // (<digits>)<sdd>*
+ "([0-9][0-9\\- \\.]+[0-9])"); // <digit><digit|sdd>+<digit>
改成用
Iterable<PhoneNumberMatch> matches = phoneUtil.findNumbers(s.toString(),
Locale.getDefault().getCountry(), Leniency.POSSIBLE, Long.MAX_VALUE);
所以判斷變得更加嚴謹,如10086在簡體中文下可以識別,但在英文就無法識別
但如果都是亂打的如12345則是無法識別。
如果客户一定要修改成号码在任何语言下都能识别,唯一的辦法就是把判斷電話號碼的CODE恢復為4.4之前(不要根據國家判斷)
把 Linkify.java 中的 addLinks() 中的這段
if ((mask & PHONE_NUMBERS) != 0) {
gatherTelLinks(links, text);
}
改為
if ((mask & PHONE_NUMBERS) != 0) {
gatherLinks(links, text, Patterns.PHONE,
new String[] { "tel:" },
sPhoneNumberMatchFilter, sPhoneNumberTransformFilter);
}
这样修改只是號碼的判斷不分國家了
不過若不修改個話 雖然有問題 但至少所有的行為會和androdi 4.4 一樣
所以还请客户自行考量。