MTK_FAQ_Telephony - Contacts

33 篇文章 0 订阅
30 篇文章 1 订阅
[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. 将  
  3. import com.google.i18n.phonenumbers.geocoding.PhoneNumberOfflineGeocoder;  
  4. import com.google.i18n.phonenumbers.NumberParseException;  
  5. import com.google.i18n.phonenumbers.PhoneNumberUtil;  
  6. import com.google.i18n.phonenumbers.Phonenumber.PhoneNumber;  
  7. 修改为:  
  8. import com.android.i18n.phonenumbers.geocoding.PhoneNumberOfflineGeocoder;  
  9. import com.android.i18n.phonenumbers.NumberParseException;  
  10. import com.android.i18n.phonenumbers.PhoneNumberUtil;  
  11. import com.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.    通话记录、联系人详情界面、短信列表、通话界面、来电显示电话格式化有问题?

(1).确认国家码是否为期望地区

(2).查看load数据时是否经过PhoneNumberUtils.formatNumber()函数处理。

 

3.    SIMVCard导入联系人电话号码格式化有问题?

(1).确认国家码是否为期望地区

(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.     public void afterTextChanged(Editable s) {  
  4.         mSelfChanged = true;  
  5.         /**不去调用父类format逻辑 
  6.         *super.afterTextChanged(s); 
  7.         **/  
  8.         mSelfChanged = false;  
  9.     }  


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

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

    FILE: PhoneNumberUtils.java 

[java]  view plain  copy
  1. PATH: alps/frameworks/base/telephony/java/android/Telephony  
  2. -------------------------------------------------------------------------------------------------------  
  3.    public static String formatNumber(String phoneNumber, String defaultCountryIso) {  
  4.       return phoneNumber;   // Just return, don't format the phoneNumber  
  5. }  


    (3). 去掉VCard导入号码时的格式化处理代码

    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 的格式化处理代码 

[java]  view plain  copy
  1.                     /* 
  2.                      * Bug Fix by Mediatek Begin. Original Android's code: xxx 
  3.                      * CR ID: ALPS00289127 Descriptions: 
  4.                      */  
  5.                     Log.i(TAG, "[actuallyImportOneSimContact] phoneNumber before : " + phoneNumber);  
  6. //                    AsYouTypeFormatter mFormatter = PhoneNumberUtil.getInstance()  
  7. //                            .getAsYouTypeFormatter(countryCode);  
  8. //                    char[] cha = phoneNumber.toCharArray();  
  9. //                    int ii = cha.length;  
  10. //                    for (int num = 0; num < ii; num++) {  
  11. //                        phoneNumber = mFormatter.inputDigit(cha[num]);  
  12. //                    }  
  13.                     Log.i(TAG, "[actuallyImportOneSimContact] phoneNumber after : " + phoneNumber);  
  14.                     /* 
  15.                      * Bug Fix by Mediatek End. 
  16.                      */  


 

    (2) 去掉 actuallyImportOneSimContact() 方法中对 additionalNumber 的格式化处理代码:

[java]  view plain  copy
  1.                         /* 
  2.                          * Bug Fix by Mediatek Begin. Original Android's code: 
  3.                          * xxx CR ID: ALPS00289127 Descriptions: 
  4.                          */  
  5.                         Log.i(TAG, "[actuallyImportOneSimContact] additionalNumber before : "  
  6.                                 + additionalNumber);  
  7. //                        AsYouTypeFormatter mFormatter = PhoneNumberUtil.getInstance()  
  8. //                                .getAsYouTypeFormatter(countryCode);  
  9. //                        char[] cha = additionalNumber.toCharArray();  
  10. //                        int ii = cha.length;  
  11. //                        for (int num = 0; num < ii; num++) {  
  12. //                            additionalNumber = mFormatter.inputDigit(cha[num]);  
  13. //                        }  
  14.                         Log.i(TAG, "[actuallyImportOneSimContact] additionalNumber after : "  
  15.                                 + additionalNumber);  
  16.                         /* 
  17.                          * Bug Fix by Mediatek End. 
  18.                          */  


 



[FAQ10145]怎么去掉联系人、通话记录、拨号列表界面中的电话号码中间的空格?
[DESCRIPTION]
 
怎么去掉联系人、通话记录、拨号列表界面中的电话号码中间的空格?
去掉空格也就是去掉号码格式化,对所有的号码串将不进行号码格式化。
 
[SOLUTION]
 
1. 注解掉格式化处理
    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.     public void afterTextChanged(Editable s) {  
  4.         mSelfChanged = true;  
  5.         /**不去调用父类format逻辑 
  6.         *super.afterTextChanged(s); 
  7.         **/  
  8.         mSelfChanged = false;  
  9.     }  


 
2. 修改formatNumber方法直接返回原始号码,不会其进行格式化
[java]  view plain  copy
  1.     FILE: PhoneNumberUtils.java   
  2.     PATH: alps/frameworks/base/telephony/java/android/Telephony  
  3. ---------------------------------------------------------------------------------------------------------------------------      
  4.     /** 
  5.      * Format a phone number. 
  6.      * <p> 
  7.      * If the given number doesn't have the country code, the phone will be 
  8.      * formatted to the default country's convention. 
  9.      * 
  10.      * @param phoneNumber 
  11.      *            the number to be formatted. 
  12.      * @param defaultCountryIso 
  13.      *            the ISO 3166-1 two letters country code whose convention will 
  14.      *            be used if the given number doesn't have the country code. 
  15.      * @return the formatted number, or null if the given number is not valid. 
  16.      * 
  17.      * @hide 
  18.      */  
  19.     public static String formatNumber(String phoneNumber, String defaultCountryIso) {  
  20.           // Before modified  
  21. //        // Do not attempt to format numbers that start with a hash or star symbol.  
  22. //        if (phoneNumber.startsWith("#") || phoneNumber.startsWith("*")) {  
  23. //            return phoneNumber;  
  24. //        }  
  25. //        PhoneNumberUtil util = PhoneNumberUtil.getInstance();  
  26. //        String result = null;  
  27. //        try {  
  28. //            PhoneNumber pn = util.parseAndKeepRawInput(phoneNumber, defaultCountryIso);  
  29. //            result = util.formatInOriginalFormat(pn, defaultCountryIso);  
  30. //        } catch (NumberParseException e) {  
  31. //        }  
  32. //        return result;  
  33.           // After modified  
  34.           return phoneNumber;   // Just return, don't format the phoneNumber  
  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 的格式化处理代码 :
---------------------------------------------------------------------------------------------------------------------------    
[java]  view plain  copy
  1.                     /* 
  2.                      * Bug Fix by Mediatek Begin. Original Android's code: xxx 
  3.                      * CR ID: ALPS00289127 Descriptions: 
  4.                      */  
  5.                     Log.i(TAG, "[actuallyImportOneSimContact] phoneNumber before : " + phoneNumber);  
  6. //                    AsYouTypeFormatter mFormatter = PhoneNumberUtil.getInstance()  
  7. //                            .getAsYouTypeFormatter(countryCode);  
  8. //                    char[] cha = phoneNumber.toCharArray();  
  9. //                    int ii = cha.length;  
  10. //                    for (int num = 0; num < ii; num++) {  
  11. //                        phoneNumber = mFormatter.inputDigit(cha[num]);  
  12. //                    }  
  13.                     Log.i(TAG, "[actuallyImportOneSimContact] phoneNumber after : " + phoneNumber);  
  14.                     /* 
  15.                      * Bug Fix by Mediatek End. 
  16.                      */  


 
    (2) 去掉  actuallyImportOneSimContact() 方法中对  additionalNumber  的格式化处理代码:
---------------------------------------------------------------------------------------------------------------------------    
[java]  view plain  copy
  1.                         /* 
  2.                          * Bug Fix by Mediatek Begin. Original Android's code: 
  3.                          * xxx CR ID: ALPS00289127 Descriptions: 
  4.                          */  
  5.                         Log.i(TAG, "[actuallyImportOneSimContact] additionalNumber before : "  
  6.                                 + additionalNumber);  
  7. //                        AsYouTypeFormatter mFormatter = PhoneNumberUtil.getInstance()  
  8. //                                .getAsYouTypeFormatter(countryCode);  
  9. //                        char[] cha = additionalNumber.toCharArray();  
  10. //                        int ii = cha.length;  
  11. //                        for (int num = 0; num < ii; num++) {  
  12. //                            additionalNumber = mFormatter.inputDigit(cha[num]);  
  13. //                        }  
  14.                         Log.i(TAG, "[actuallyImportOneSimContact] additionalNumber after : "  
  15.                                 + additionalNumber);  
  16.                         /* 
  17.                          * Bug Fix by Mediatek End. 
  18.                          */  





[FAQ14441]L1版本上实现拨号盘输入+44与0开头的号码相互匹配
[DESCRIPTION]
 
在拨号盘输入+44123456可以匹配到0123456,反之亦然.
 
 
[SOLUTION]
 
 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. 添加函数:
[java]  view plain  copy
  1. public Cursor handleDialerSearchQueryEx2(SQLiteDatabase db, Uri uri) {  
  2.   String filterParam = uri.getLastPathSegment();  
  3.   if(filterParam.startsWith("0") || filterParam.startsWith("+44")){  
  4.              String filterParam2 = null;  
  5.     Cursor[] cursors = new Cursor[2];  
  6.       
  7.     if(filterParam.startsWith("0"))  
  8.         filterParam2 = "+44" + filterParam.substring(1);  
  9.     else if(filterParam.startsWith("+44"))  
  10.         filterParam2 = "0" + filterParam.substring(3);  
  11.       
  12.      LogUtils.d(TAG, "MTK-DialerSearch, filterParam: " +filterParam+"filterParam2: "+filterParam2);  
  13.      cursors[0]= handleDialerSearchQueryEx(db, uri,filterParam);          
  14.      LogUtils.d(TAG, "MTK-DialerSearch, queryDialerSearch, end.1. ResultCount:cursors[0]=" + cursors[0].getCount());  
  15.      cursors[1]= handleDialerSearchQueryEx(db, uri,filterParam2);        
  16.      LogUtils.d(TAG, "MTK-DialerSearch, queryDialerSearch, end.2. ResultCount:cursors[1]=" + cursors[1].getCount());  
  17.      return new MergeCursor(cursors);  
  18.   } else {  
  19.                
  20.              Cursor c = handleDialerSearchQueryEx(db,uri, filterParam);  
  21.              LogUtils.d(TAG, "MTK-DialerSearch, queryDialerSearch, end. ResultCount: " + c.getCount());  
  22.              return c;   
  23.         }  
  24.     
  25.  }  



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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值