我需要确定任何电话号码的国家运营商代码(而不是运营商名称),使用libphonenumber Java SDK.我该怎么做?我可以找到如何检索运营商名称的唯一方法:
Locale.PhoneNumberUtil phoneUtil = PhoneNumberUtil.getInstance();
PhoneNumberToCarrierMapper carrierMapper = PhoneNumberToCarrierMapper.getInstance();
Phonenumber.PhoneNumber numberProto = phoneUtil.parse(+375445111111, "");
String name = carrierMapper.getNameForValidNumber(numberProto, Locale.US);
System.out.println(name);//Velcome, but I need just number like 44, or 37544, or 375445
2条答案
按热度按时间35g0bw711#
你不能。不是每个国家的电话号码都像这样在运营商之间分割,所以不是每个国家都有运营商代码。
特别是在欧盟,不可能从电话号码推导出运营商,因为欧盟规定,人们可以在不改变电话号码的情况下切换运营商。虽然每个运营商可能都有特定的号码序列,由国家当局分配给客户(而不是根据需要按顺序或随机获得),但这些号码绝不保证属于任何特定的运营商。
我不知道libphonenumber是如何试图找到运营商名称的,也许它会查询数据库或进行有根据的猜测,如果它是开源的,你也许可以自己找到并从那里开始。
ckocjqey2#
我最后的肮脏解决方案。从
com.google.i18n.phonenumbers
类复制粘贴的部分代码应该位于package com.google.i18n.phonenumbers.prefixmapper;
中,否则无法访问类的方法、字段或变量。