android找到正确的电话号码

问题描述:

给定一个电话号码作为字符串,如何找到存储在联系人中的正确值?android找到正确的电话号码

实施例:
给定电话号码:在接触9743343954
电话号码:919743343954

编辑:数字的长度不是固定的。

谢谢。

+1

如果你很高兴与下面的答案之一,请千万记得要接受它!它鼓励人们提供答案:-) – 2013-03-02 16:46:45

我不知道我明白你的意思,但也许这将帮助你:

//Find contact by given number 
    Uri uri = Uri.withAppendedPath(PhoneLookup.CONTENT_FILTER_URI, Uri.encode("9743343954")); 
    String[] projection = new String[] { PhoneLookup.NUMBER, PhoneLookup.NORMALIZED_NUMBER }; 
    Cursor c = getContentResolver().query(uri, projection, null, null, null); 
    if (c.moveToFirst()) {// while(c.moveToNext()){ 
     //get number assigned by user to given contact, in this case 9743343954 
     String number = c.getString(c.getColumnIndexOrThrow(PhoneLookup.NUMBER)); 
     //get normalized E164 number, in this case +919743343954 
     String normalized = c.getString(c.getColumnIndexOrThrow(PhoneLookup.NORMALIZED_NUMBER)); 
     Toast.makeText(getApplicationContext(), "Number: " + number + "; normalized: " + normalized, 
       Toast.LENGTH_LONG).show(); 
    } 
    c.close(); 

为了使这个作品添加权限清单项目:

<uses-permission android:name="android.permission.READ_CONTACTS" /> 

以您的示例为例,电话号码长度为10个字符,联系人为13个,您希望最后10个匹配。所以,像这样:

// I am assuming that you've removed all spaces, full stops, 
// dashes etc from the two input variables 
public boolean numbersMatch(String numberToMatch, String numberFromContacts) { 
    // Ensure that the both numbers are of a reasonable length 
    if (numberToMatch.length() < 9) return false; 
    if (numberFromContacts.length() < 9) return false; 

    // Is the number to match hidden in the contacts number 
    if (numberFromContacts.lastIndexOf(numberToMatch) != -1) return true; 

    // Or is the contact number hidden in the number to macth 
    if (numberToMatch.lastIndexOf(numberFromContacts) != -1) return true; 

    // No match, so return false 
    return false; 
} 

第一步是去除所有多余的空格和多余的字符:

//Removes the extra characters from the incoming number 
    private String removeExtraCharacters(String phoneNumber){ 
     try 
     { 
      phoneNumber = phoneNumber.replace("(", ""); 
      phoneNumber = phoneNumber.replace(")", ""); 
      phoneNumber = phoneNumber.replace("-", ""); 
      phoneNumber = phoneNumber.replace(" ", ""); 
      phoneNumber = phoneNumber.replace("+", ""); 

     } 
     catch (Exception e) 
     { 
      Log.e("Cal Reciever_R", e.toString()); 
     } 
     return phoneNumber; 
    } 

现在你可以使用的子方法得到的10位数字和ignorin的+91从前面如下:

phoneNumber =phoneNumber .substring(phoneNumber .length()-10); 

你为什么不这样做

假设手机麻木呃给出的是

String a = "9123456789"; 

而且一个触点是

String b = "+91-9123456789"; 

然后,你可以很容易地检查这种方式

if(b.contains(a)) 
{ 
//Do what you want! 
} 
+0

如果我有一个数字“+ 91-9123456789”和一个短的本地“234567”?他们必须有所不同。 – Gaket 2018-02-07 01:47:37

从@Lecho答案似乎是好,如果你想获得相关的接触(或相关信息)。从Android的文档此页面上的更多信息http://developer.android.com/reference/android/provider/ContactsContract.PhoneLookup.html

据我所知,PhoneLookup.NORMALIZED_NUMBER是因为API 16

另一方面可用,如果要比较两个数字,看看他们是相同,但两种不同的方式,你可以使用格式化:

PhoneNumberUtils.compare(phoneNumber1, phoneNumber2) 

最佳,