如何删除国家/地区代码,从联系人中选择电话号码

时间:2017-08-03 06:16:21

标签: android telephonymanager

enter image description here

我对该部分有疑问。当我从联系人列表中选择电话号码时,如何删除国家/地区代码?

例如:+91 999999999而不是9999999999或+020 9696854549而不是9696854549任何人都可以知道我的问题的答案。请解决这个问题

我在这里附上我的代码和图片。

     private void contactPicked(Intent data) {
    Cursor cursor = null;
    try {
    String phoneNo = null ;
    // getData() method will have the Content Uri of the selected contact
    Uri uri = data.getData();
    //Query the content uri
    cursor = getContentResolver().query(uri, null, null, null, null);
    cursor.moveToFirst();
    // column index of the phone number
    int  phoneIndex =cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER
  phoneNo = cursor.getString(phoneIndex);
   String phoneNumber = phoneNo.replaceAll(" ","");
   mobile_et.setText(phoneNumber);
} catch (Exception e) {
    e.printStackTrace();
}
}

8 个答案:

答案 0 :(得分:3)

我的英语很差,但我会尽力回答你的问题。

首先,将此行添加到build.gradle

compile 'com.googlecode.libphonenumber:libphonenumber:8.7.0'

下面是kotlin写的一个示例

fun deleteCountry(phone: String) : String{
    val phoneInstance = PhoneNumberUtil.getInstance()
    try {
        val phoneNumber = phoneInstance.parse(phone, null)
        return phoneNumber?.nationalNumber?.toString()?:phone
    }catch (_ : Exception) {
    }
    return phone
}

如果电话号码不是以'+'开头,后跟国家/地区呼叫代码,那么您应该传递区域信息,例如:

  

val phoneNumber = phoneInstance.parse(phone,“CN”)

答案 1 :(得分:3)

您可以使用 startsWith()

  

如果字符串以字符串开头,则此方法有两个变体并进行测试   指定的前缀以指定的索引开头或默认为   开始。

if(phoneNumber.startsWith("+"))
{
    if(phoneNumber.length()==13)
    {
    String str_getMOBILE=phoneNumber.substring(3);
    mobile_et.setText(str_getMOBILE);
    }
    else if(phoneNumber.length()==14)
    {
    String str_getMOBILE=phoneNumber.substring(4);
    mobile_et.setText(str_getMOBILE);
    }


}
else
{
 mobile_et.setText(phoneNumber);
}

答案 2 :(得分:2)

它适用于所有实例。您无需关心国家/地区代码的数字

String get_Mo = phoneNumber.substring(phoneNumber.lastIndexOf(' ')+1));

答案 3 :(得分:1)

使用此功能希望它能帮到你:

public String phoeNumberWithOutCountryCode(String phoneNumberWithCountryCode) {
        Pattern complie = Pattern.compile(" ");
        String[] phonenUmber = complie.split(phoneNumberWithCountryCode);
        Log.e("number is", phonenUmber[1]);
        return phonenUmber[1];
    }

答案 4 :(得分:1)

我只是简单地扩展了一个答案,即如果您不想使用任何库,则可以通过这种方式来完成。为了匹配任何前缀,并且由于某些国家/地区可以部分共享相同的前缀(例如91和91-721),因此请按降序和大小将所有可能性添加到正则表达式中。

遵循此代码:

public static String PhoneNumberWithoutCountryCode(String phoneNumberWithCountryCode){//+91 7698989898
        Pattern compile = Pattern.compile("\\+(?:998|996|995|994|993|992|977|976|975|974|973|972|971|970|968|967|966|965|964|963|962|961|960|886|880|856|855|853|852|850|692|691|690|689|688|687|686|685|683|682|681|680|679|678|677|676|675|674|673|672|670|599|598|597|595|593|592|591|590|509|508|507|506|505|504|503|502|501|500|423|421|420|389|387|386|385|383|382|381|380|379|378|377|376|375|374|373|372|371|370|359|358|357|356|355|354|353|352|351|350|299|298|297|291|290|269|268|267|266|265|264|263|262|261|260|258|257|256|255|254|253|252|251|250|249|248|246|245|244|243|242|241|240|239|238|237|236|235|234|233|232|231|230|229|228|227|226|225|224|223|222|221|220|218|216|213|212|211|98|95|94|93|92|91|90|86|84|82|81|66|65|64|63|62|61|60|58|57|56|55|54|53|52|51|49|48|47|46|45|44\\D?1624|44\\D?1534|44\\D?1481|44|43|41|40|39|36|34|33|32|31|30|27|20|7|1\\D?939|1\\D?876|1\\D?869|1\\D?868|1\\D?849|1\\D?829|1\\D?809|1\\D?787|1\\D?784|1\\D?767|1\\D?758|1\\D?721|1\\D?684|1\\D?671|1\\D?670|1\\D?664|1\\D?649|1\\D?473|1\\D?441|1\\D?345|1\\D?340|1\\D?284|1\\D?268|1\\D?264|1\\D?246|1\\D?242|1)\\D?");
        String number = phoneNumberWithCountryCode.replaceAll(compile.pattern(), "");
        //Log.e(tag, "number::_>" +  number);//OutPut::7698989898
        return number;
    }

答案 5 :(得分:0)

String Trimmed = s.toString().trim();
if(Trimmed.length() > 10){
char[] number = Trimmed.toCharArray();
int extra;
int dif = Trimmed.length() - 10 ;
for(int i = dif; i < Trimmed.length() ; i++){
    extra = i-dif;
    number[extra] = number[i];
}
for (int i = 10 ; i < Trimmed.length() ; i++){
    number[i]=' ';
}
String finalNumber = String.valueOf(number);
MobileNumberET.setText(finalNumber.trim());
}

///将其粘贴到文本更改监听器中

答案 6 :(得分:0)

使用图书馆 https://groups.google.com/forum/?hl=en&fromgroups#!forum/libphonenumber-discuss

PhoneNumberUtil phoneUtil = PhoneNumberUtil.getInstance();
try {
// phone must begin with '+'
PhoneNumber numberProto = phoneUtil.parse(phone, "");
int countryCode = numberProto.getCountryCode();
} catch (NumberParseException e) {
System.err.println("NumberParseException was thrown: " + e.toString());
}

如果您想在手机上的特定Sim上执行一些额外的功能,则可以使用以下许多方法中的一些。 可能不是一个完美的解决方案,但我会尽力而为。 首先以编程方式获取国家/地区代码:

TelephonyManager tm = (TelephonyManager) 
this.getSystemService(Context.TELEPHONY_SERVICE);
//get the country iso from sim e.g US, NG, FR etc
String countryIso = tm.getSimCountryIso().toUpperCase():
//get countrycode from refegion returns the code e.g +123, +1, +23 etc. 
Int countryCode = 
phoneNumberUtil.getInstance().getCountryCodeForRegion(countryIso);

然后,您可以使用自己喜欢的方式将其删除,例如String PhoneNumber = phoneNo.replaceAll("countryCode ", "" );

答案 7 :(得分:0)

尝试一下。...

                if(number.length()>10)
                {
                    int startidx=number.length()-10;
                    String getnumber=number.substring(startidx,number.length());
                    etEmerNumber.setText(getnumber);
                }
                else
                {
                    etEmerNumber.setText(number);
                }