首页 > 代码库 > android 联系人中的号码格式

android 联系人中的号码格式

联系人中有一些地方会对号码进行format,一般会有两个问题:
1、        号码的间隔数目,例如4-3-4的间隔(1981 981 1981),3-4-4的间隔(198 1981 1981);
2、        间隔使用的是“-”还是“ ”(空格)。
 


号码间隔数目的问题
联系人主要利用Google的com.android.i18n.phonenumbers;这一包中做的号码处理。根据当时的CountryISO,也就是当前手机所处国家地区的情况来做不同的分隔。
例如:
中国(CountryISO:CN)
?  当判别为手机号码时,会186 7675 3984(3-4-4)
?  当判别为区号+号码时为,会是0755 2663 0099 (4-4-4)或者021 2663 0099 (3-4-4)
?  当判别为国家码+区号+号码时,会是00 86 755 2663 0099
总之这个判别规则会根据国家的号码特征来对应。
 
    若是海外需求,请在当地测试看是否符合需求。若是不符合需求请再做客制化修改。
  
   若是实在需要修改,需要自己写一个TextWatcher,例如在联系人编辑界面,输入号码的TextWatcher是在TextFieldsEditorView.java (alps\packages\apps\contacts\src\com\android\contacts\editor)的
    @Override
    public void setValues(DataKind kind, ValuesDelta entry, RawContactDelta state, boolean readOnly,
            ViewIdGenerator vig)
 
            if (inputType == InputType.TYPE_CLASS_PHONE) {
                /** M: New Feature xxx @{ */
                /*
                 * original code
                 * PhoneNumberFormatter.setPhoneNumberFormattingTextWatcher
                 * (mContext, fieldView);
                 */
                // add by mediatek
                ExtensionManager.getInstance().getContactDetailExtension().setViewKeyListener(
                        fieldView, ContactPluginDefault.COMMD_FOR_OP01);
                PhoneNumberFormatter.setPhoneNumberFormattingTextWatcher(mContext, fieldView, null);
                /** @} */
 
            }
这里 PhoneNumberFormatter.setPhoneNumberFormattingTextWatcher(mContext, fieldView, null);将设置Google 默认的TextWatcher,请在这里设置你自己的TextWatcher。
 
在TextWatcher中请重写public synchronized void afterTextChanged(Editable s)中判断并做数字间隔实现。
 
其他号码被format的地方也是一样注册自己的TextWatcher。
 
不能改动Google的com.android.i18n.phonenumbers,否则会导致CTS fail
 
号码间隔是“-”还是“ ”(空格)的问题
在上述TextWatcher完成号码format并返回后,再做进一步处理:
if(number.contains("-"))
     number = number.replace("-"," ");
或者
if(number.contains(" "))
     number = number.replace("","-");

android 联系人中的号码格式