微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

MTK_FAQ_Telephony - Contacts

[FAQ15080]号码归属地更新方法
[DESCRIPTION]
之前因为Google的归属地不包含国内手机号码部分,所以MTK有做一个国内手机号码归属地的数据库,但是因为不能及时更新数据;后续我们有发现Google在这方面已经完善,并且会及时更新。
所以我们会在后续版本拿掉MTK的归属地,保持Google认归属地。
以下部分是如何关掉MTK归属地 和 及时更新Google归属地的方法,请参考。
ID: FAQ10342[Geocoding]修改手机号码归属地
ID: FAQ09200[Geocoding]如何关闭来电号码归属地?
[SOLUTION]
第一步:关闭 MTK 归属地,使用 Google 归属地
1. 在ProjectConfig.mk关闭 option

MTK_PHONE_NUMBER_GEODESCRIPTION =no//yes

2. 修改代码 CallerInfo.java

[java] view plain copy
  1. /alps/packages/apps/InCallUI/src/com/android/incallui/CallerInfo.java
  2. importcom.google.i18n.phonenumbers.geocoding.PhoneNumberOfflineGeocoder;
  3. importcom.google.i18n.phonenumbers.NumberParseException;
  4. importcom.google.i18n.phonenumbers.PhoneNumberUtil;
  5. importcom.google.i18n.phonenumbers.Phonenumber.PhoneNumber;
  6. 修改为:
  7. importcom.android.i18n.phonenumbers.geocoding.PhoneNumberOfflineGeocoder;
  8. importcom.android.i18n.phonenumbers.NumberParseException;
  9. importcom.android.i18n.phonenumbers.PhoneNumberUtil;
  10. importcom.android.i18n.phonenumbers.Phonenumber.PhoneNumber;



第二步,如果代码中的Google数据库不是最新,如何更新:

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

2. 使用以下网站最新库文件替换代码中的库文件

用这个Link下的库文件

https://github.com/googlei18n/libphonenumber/tree/master/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data

替换代码路径下的目录下的同名文件(格式国家码_语言,如86_en,86_cn)。

alps\external\libphonenumber\java\src\com\android\i18n\phonenumbers\geocoding\data



[FAQ12191]Android电话号码格式化

[DESCRIPTION]

1.拨号盘、新建联系人列表中电话栏号码格式化

2.通话记录、联系人详情界面、通话界面、来电显示电话号码格式化

3.SIMVCard导入联系人电话号码格式化

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”,查看当前获得国家码

因此,系统当前获得的CountryIsoSIM卡网络注册情况、最近一次定位位置情况、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.SIMVCard导入联系人电话号码格式化有问题?

(2).查看是否经AsYouTypeFormatterinputDigit()函数处理。

4.如何禁用电话号码格式化、去掉电话号码中的空格或横杠?

(1).若想禁用EditText中的动态格式化,则修改以下文件
FILE:
PhoneNumberFormatter.java

Before KK1
PATH:alps/packages/apps/contacts/src/com/android/contacts/Util

After KK1

[java] view plain copy
  1. PATH:alps/packages/apps/contactscommon/src/com/android/contacts/common/Util
  2. -----------------------------------------------------------------------------------------------------------------------
  3. publicvoidafterTextChanged(Editables){
  4. mSelfChanged=true;
  5. /**不去调用父类format逻辑
  6. *super.afterTextChanged(s);
  7. **/
  8. false;
  9. }


(2).禁用TextView中号码格式化,则修改以下文件

PhoneNumberUtils.formatNumber()方法直接返回原始号码,不会其进行格式化

FILE:PhoneNumberUtils.java

copy
    PATH:alps/frameworks/base/telephony/java/android/Telephony
  1. -------------------------------------------------------------------------------------------------------
  2. staticStringformatNumber(StringphoneNumber,StringdefaultCountryIso){
  3. returnphoneNumber;//Justreturn,don'tformatthephoneNumber
  4. (3).去掉VCard导入号码时的格式化处理代码

    Before JB5

    AbstractStartSimservice.java
    PATH:
    alps/packages/apps/contacts/src/com/mediatek/contacts/Simcontact

    After JB5

    FILE: SIMImportProcessor.java
    PATH: alps/packages/apps/contacts/src/com/mediatek/contacts/simservice

    (1)去掉actuallyImportOnesimContact()方法中对phoneNumber的格式化处理代码copy

    /*
  1. *BugFixbyMediatekBegin.OriginalAndroid'scode:xxx
  2. *CRID:ALPS00289127Descriptions:
  3. */
  4. Log.i(TAG,"[actuallyImportOnesimContact]phoneNumberbefore:"+phoneNumber);
  5. //AsYouTypeFormattermFormatter=PhoneNumberUtil.getInstance()
  6. //.getAsYouTypeFormatter(countryCode);
  7. //char[]cha=phoneNumber.tochararray();
  8. //intii=cha.length;
  9. //for(intnum=0;num<ii;num++){
  10. //phoneNumber=mFormatter.inputDigit(cha[num]);
  11. //}
  12. "[actuallyImportOnesimContact]phoneNumberafter:"+phoneNumber);
  13. /*
  14. *BugFixbyMediatekEnd.
  15. */


(2)方法中对additionalNumber的格式化处理代码copy

    *BugFixbyMediatekBegin.OriginalAndroid'scode:
  1. *xxxCRID:ALPS00289127Descriptions:
  2. "[actuallyImportOnesimContact]additionalNumberbefore:"
  3. +additionalNumber);
  4. //AsYouTypeFormattermFormatter=PhoneNumberUtil.getInstance()
  5. //.getAsYouTypeFormatter(countryCode);
  6. //char[]cha=additionalNumber.tochararray();
  7. //intii=cha.length;
  8. //for(intnum=0;num<ii;num++){
  9. //additionalNumber=mFormatter.inputDigit(cha[num]);
  10. //}
  11. "[actuallyImportOnesimContact]additionalNumberafter:"
  12. +additionalNumber);
  13. */



[FAQ10145]怎么去掉联系人、通话记录、拨号列表界面中的电话号码中间的空格?
[DESCRIPTION]
怎么去掉联系人、通话记录、拨号列表界面中的电话号码中间的空格?
去掉空格也就是去掉号码格式化,对所有的号码串将不进行号码格式化。
1.注解掉格式化处理
FILE: PhoneNumberFormatter.java
Before KK1
PATH: alps/packages/apps/contacts/src/com/android/contacts/Util
After KK1
copy
    PATH:alps/packages/apps/contactscommon/src/com/android/contacts/common/Util
  1. -----------------------------------------------------------------------------------------------------------------------
  2. voidafterTextChanged(Editables){
  3. true;
  4. /**不去调用父类format逻辑
  5. *super.afterTextChanged(s);
  6. **/
  7. false;
  8. }


2.修改formatNumber方法直接返回原始号码,不会其进行格式化
[java] view plain copy
  1. FILE:PhoneNumberUtils.java
  2. PATH:alps/frameworks/base/telephony/java/android/Telephony
  3. ---------------------------------------------------------------------------------------------------------------------------
  4. /**
  5. *Formataphonenumber.
  6. *<p>
  7. *Ifthegivennumberdoesn'thavethecountrycode,thephonewillbe
  8. *formattedtothedefaultcountry'sconvention.
  9. *
  10. *@paramphoneNumber
  11. *thenumbertobeformatted.
  12. *@paramdefaultCountryIso
  13. *theISO3166-1twoletterscountrycodewhoseconventionwill
  14. *beusedifthegivennumberdoesn'thavethecountrycode.
  15. *@returntheformattednumber,ornullifthegivennumberisnotvalid.
  16. *
  17. *@hide
  18. */
  19. ottom:none; border-left:3px solid rgb(108,StringdefaultCountryIso){
  20. //Beforemodified
  21. ////Donotattempttoformatnumbersthatstartwithahashorstarsymbol.
  22. //if(phoneNumber.startsWith("#")||phoneNumber.startsWith("*")){
  23. //returnphoneNumber;
  24. //}
  25. //PhoneNumberUtilutil=PhoneNumberUtil.getInstance();
  26. //Stringresult=null;
  27. //try{
  28. //PhoneNumberpn=util.parseAndKeepRawInput(phoneNumber,defaultCountryIso);
  29. //result=util.formatInoriginalFormat(pn,defaultCountryIso);
  30. //}catch(NumberParseExceptione){
  31. //}
  32. //returnresult;
  33. //Aftermodified
  34. ottom:none; border-left:3px solid rgb(108,don'tformatthephoneNumber
  35. }


3.去掉导入号码时的格式化处理代码
Before JB5
FILE: AbstractStartSimservice.java
PATH: alps/packages/apps/contacts/src/com/mediatek/contacts/Simcontact
After JB5
FILE:SIMImportProcessor.java
PATH: alps/packages/apps/contacts/src/com/mediatek/contacts/simservice
(1) 去掉 actuallyImportOnesimContact()方法中对 phoneNumber的格式化处理代码
---------------------------------------------------------------------------------------------------------------------------
copy
    /*
  1. *BugFixbyMediatekBegin.OriginalAndroid'scode:xxx
  2. *CRID:ALPS00289127Descriptions:
  3. */
  4. "[actuallyImportOnesimContact]phoneNumberbefore:"+phoneNumber);
  5. //AsYouTypeFormattermFormatter=PhoneNumberUtil.getInstance()
  6. //.getAsYouTypeFormatter(countryCode);
  7. //char[]cha=phoneNumber.tochararray();
  8. //intii=cha.length;
  9. //for(intnum=0;num<ii;num++){
  10. //phoneNumber=mFormatter.inputDigit(cha[num]);
  11. //}
  12. "[actuallyImportOnesimContact]phoneNumberafter:"+phoneNumber);
  13. /*
  14. *BugFixbyMediatekEnd.
  15. */


(2) 去掉 actuallyImportOnesimContact()方法中对 additionalNumber 的格式化处理代码
copy
    *BugFixbyMediatekBegin.OriginalAndroid'scode:
  1. *xxxCRID:ALPS00289127Descriptions:
  2. "[actuallyImportOnesimContact]additionalNumberbefore:"
  3. +additionalNumber);
  4. //AsYouTypeFormattermFormatter=PhoneNumberUtil.getInstance()
  5. //.getAsYouTypeFormatter(countryCode);
  6. //char[]cha=additionalNumber.tochararray();
  7. //intii=cha.length;
  8. //for(intnum=0;num<ii;num++){
  9. //additionalNumber=mFormatter.inputDigit(cha[num]);
  10. //}
  11. "[actuallyImportOnesimContact]additionalNumberafter:"
  12. +additionalNumber);
  13. */



[FAQ14441]L1版本上实现拨号盘输入+44与0开头的号码相互匹配
在拨号盘输入+44123456可以匹配到0123456,反之亦然.
L0上该功能请参考FAQ11308[DialerSearch] 在kk上如何实现+7与8开头的号码在拨号盘上搜索相互匹配
L1上的改动如下:
1.ContactsProvider2.java,queryLocal,
修改下面这行:
return mDialerSearchSupport.handleDialerSearchQueryEx(db,uri);
为:
return mDialerSearchSupport.handleDialerSearchQueryEx2(db,uri);

然后添加下面的代码
2. 添加如下包
在DialerSearchSupport.java文件开头加入:
import android.database.MergeCursor;

3. 添加函数:
copy
    publicCursorhandleDialerSearchQueryEx2(sqliteDatabasedb,Uriuri){
  1. StringfilterParam=uri.getLastPathSegment();
  2. if(filterParam.startsWith("0")||filterParam.startsWith("+44")){
  3. StringfilterParam2=null;
  4. Cursor[]cursors=newCursor[2];
  5. "0"))
  6. filterParam2="+44"+filterParam.substring(1);
  7. else"+44"))
  8. "0"+filterParam.substring(3);
  9. LogUtils.d(TAG,255); background-color:inherit">"MTK-DialerSearch,filterParam:"+filterParam+"filterParam2:"+filterParam2);
  10. cursors[0]=handleDialerSearchQueryEx(db,uri,filterParam);
  11. ottom:none; border-left:3px solid rgb(108,queryDialerSearch,end.1.ResultCount:cursors[0]="+cursors[0].getCount());
  12. 1]=handleDialerSearchQueryEx(db,filterParam2);
  13. ottom:none; border-left:3px solid rgb(108,end.2.ResultCount:cursors[1]="+cursors[1].getCount());
  14. returnnewMergeCursor(cursors);
  15. }else{
  16. Cursorc=handleDialerSearchQueryEx(db,filterParam);
  17. ottom:none; border-left:3px solid rgb(108,end.ResultCount:"+c.getCount());
  18. returnc;
  19. }
  20. }



3. 将 public Cursor handleDialerSearchQueryEx(sqliteDatabase db,Uri uri)
这个函数修改为:
public Cursor handleDialerSearchQueryEx(sqliteDatabase db,Uri uri,String filterParam)
将handleDialerSearchQueryEx中第一句代码即下面这句注释掉: String filterParam = uri.getLastPathSegment();

原文地址:https://www.jb51.cc/ubuntu/350378.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐