MTK_PHONE_NUMBER_GEODESCRIPTION =no//yes
1. 现在以下Link查看最新数据有没有更正
//中国号码对应归属地文件
//中文版https://github.com/googlei18n/libphonenumber/blob/master/resources/geocoding/zh/86.txt
//英文版https://github.com/googlei18n/libphonenumber/blob/master/resources/geocoding/en/86.txt
用这个Link下的库文件
替换代码路径下的目录下的同名文件(格式国家码_语言,如86_en,86_cn)。
alps\external\libphonenumber\java\src\com\android\i18n\phonenumbers\geocoding\data
[DESCRIPTION]
1.拨号盘、新建联系人列表中电话栏号码格式化
2.通话记录、联系人详情界面、通话界面、来电显示电话号码格式化
3.SIM、VCard导入联系人电话号码格式化
4.禁用电话号码格式化、去掉电话号码中的空格或横杠
[NOTE]
Google Android系统中,电话号码格式化跟用户所处国家地区有关。
根据系统获得当前CountryIso,例如中国大陆是CN,美国是US,英国是UK等,按照每个国家电话号码书写习惯,格式化符合规则的号码。
例如在中国,固话格式化为“区号xxxx xxx”或xxxx xxxx”,而手机号码格式化为“1xx xxxx xxxx”。
获得CountryIso:
Android系统当前国家码是通过接口String countryIso = GeoUtil.getCurrentCountryIso()获得。而GeoUtil.getCurrentCountryIso()一直会Call到系统服务CountryDetector,并在ComprehensiveCountryDetector.detectCountry()函数确定当前CountryIso。
系统服务CountryDetector遵循从getNetworkBasedCountry(),getLastKnownLocationBasedCountry(),getSimBasedCountry(),getLocaleCountry()顺序,其精度依次由高到低,获得系统当前最可能的CountryIso。通过查找mobilelog关键字“CountryDetector”,查看当前获得国家码。
因此,系统当前获得的CountryIso与SIM卡网络注册情况、最近一次定位位置情况、SIM发卡运营商所在地区类型、当前Android系统语言地区设置情况相关。
格式化号码:
AsYouTypeFormatter.java
(path:external\libphonenumber\java\src\com\android\i18n\phonenumbers)
通过构造函数AsYouTypeFormatter(String regionCode)传入当前CountryIso,由成员函数public String inputDigit(char nextChar)或public String inputDigitAndRememberPosition(char nextChar)依次格式化目前所输入的字符串。
[SOLUTION]
1.拨号盘、新建联系人列表中电话栏号码格式化有问题?
(1).确认国家码是否为期望地区
(2).查看对应控件EditText是否绑定PhoneNumberFormattingTextWatcher()?
关键代码
PhoneNumberFormatter.setPhoneNumberFormattingTextWatcher(getActivity(),mDigits,mHandler);
2.通话记录、联系人详情界面、短信列表、通话界面、来电显示电话格式化有问题?
(2).查看load数据时是否经过PhoneNumberUtils.formatNumber()函数处理。
3.SIM、VCard导入联系人电话号码格式化有问题?
(2).查看是否经AsYouTypeFormatter的inputDigit()函数处理。
4.如何禁用电话号码格式化、去掉电话号码中的空格或横杠?
@H_403_639@(1).若想禁用EditText中的动态格式化,则修改以下文件
FILE:PhoneNumberFormatter.java
Before KK1
PATH:alps/packages/apps/contacts/src/com/android/contacts/Util
After KK1
令PhoneNumberUtils.formatNumber()方法直接返回原始号码,不会其进行格式化
FILE:PhoneNumberUtils.java
- PATH:alps/frameworks/base/telephony/java/android/Telephony
- -------------------------------------------------------------------------------------------------------
- staticStringformatNumber(StringphoneNumber,StringdefaultCountryIso){
- returnphoneNumber;//Justreturn,don'tformatthephoneNumber
- (3).去掉VCard导入号码时的格式化处理代码
Before JB5
AbstractStartSIMService.java
PATH:alps/packages/apps/contacts/src/com/mediatek/contacts/SimcontactAfter JB5
FILE: SIMImportProcessor.java
PATH: alps/packages/apps/contacts/src/com/mediatek/contacts/simservice(1)去掉actuallyImportOneSimContact()方法中对phoneNumber的格式化处理代码:copy