android 会将 count >=5 的数字视为电话号码。所以我认为至少会有2个解决方案:
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;
}
};
所以我们只需将“PHONE_NUMBER_MINIMUM_DIGITS”替换为 6
2)一个更复杂的解决方案是,如果您的电话号码是更具体的格式,例如,必须是“(xxx)xxx-xxxx”,您可以使用自己的模式替换Patterns.PHONE,提取和更准确地应用电话号码的链接