android会将count> = 5的数字视为电话号码。所以我认为至少会有两种解决方案:
1)一个简单的解决方法:如果你确定电话号码的长度超过5,例如,至少6位数,你可以做一些解决方法:
private final static int MY_PHONE_NUMBER_MINIMUM_DIGITS = 6;
Linkify.addLinks(main, Patterns.PHONE, "tel:", new Linkify.MatchFilter() {
public final boolean acceptMatch(CharSequence s, int start, int end) {
int digitCount = 0;
for (int i = start; i < end; i++) {
if (Character.isDigit(s.charAt(i))) {
digitCount++;
if (digitCount >= MY_PHONE_NUMBER_MINIMUM_DIGITS ) {
return true;
}
}
}
return false;
}
}, Linkify.sPhoneNumberTransformFilter);这个解决方法是基于Linkify的android源代码,在Linkify中,方法:
gatherLinks(links, text, Patterns.PHONE,
new String[] { "tel:" },
sPhoneNumberMatchFilter, sPhoneNumberTransformFilter);将被调用,而sPhoneNumberMatchFilter将过滤小于5的数字:
public static final MatchFilter sPhoneNumberMatchFilter = new MatchFilter() {
public final boolean acceptMatch(CharSequence s, int start, int end) {
int digitCount = 0;
for (int i = start; i < end; i++) {
if (Character.isDigit(s.charAt(i))) {
digitCount++;
if (digitCount >= PHONE_NUMBER_MINIMUM_DIGITS/*=5*/) {
return true;
}
}
}
return false;
}};
所以我们只用6替换“PHONE_NUMBER_MINIMUM_DIGITS”
2)更复杂的解决方案是,如果您的电话号码是更具体的格式,例如,必须是“(xxx)xxx-xxxx”,您可以使用自己的模式替换Patterns.PHONE,以提取和更准确地应用电话号码链接