2013-03-02 5 views
1

전화 번호가 문자열로 주어지면 연락처에 저장된대로 올바른 값을 찾으려면 어떻게해야합니까?android 올바른 전화 번호를 찾으십시오.

예 :
을 감안할 때 전화 번호 : 연락처에서 9743343954
전화 번호 : 919743343954

편집 : 숫자의 길이는 고정되어 있지 않습니다.

감사합니다.

+1

, 그것을 받아 들일 것을 잊지 마십시오! 사람들이 답변을 제공 할 것을 권장합니다 :-) –

답변

3

을 확인할 수 있지만입니다 이것은 당신을 도울 것입니다 :

//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" /> 
2

예제를 사용하면 전화 번호는 길이가 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; 
} 
-1

첫 번째 단계는 모든 여분의 공백과 추가 문자 제거하는 것입니다 : 이제 10 자리 숫자를 얻기 위해 문자열의 방법을 사용할 수 있습니다

//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; 
    } 

과에서 ignorin +91 전면은 다음과 같이

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

왜이

이 전화 감각을 가정하지 않는다 어 주어

String a = "9123456789"; 

입니다 그리고 연락처에있는 사람은 그런

String b = "+91-9123456789"; 

가 쉽게 어쩌면 그것을 나는 당신이 무슨 뜻인지 이해가 잘 모르겠어요 이런 식으로

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

그리고 "+ 91-9123456789"라는 숫자와 "234567"이라는 짧은 로컬 번호가 있으면 어떻게합니까? 그들은 달라야 만합니다. – Gaket

1

@Lecho에서 그 대답은 당신이 관련된 접촉 (또는 관련 정보)를 얻으려면 좋은 것 같다. 안드로이드 문서에서이 페이지에 대한 자세한 내용 http://developer.android.com/reference/android/provider/ContactsContract.PhoneLookup.html

당신은 그들이 있는지 확인하기 위해이 개 숫자를 비교하려는 경우 지금까지 내가 아는 한, PhoneLookup.NORMALIZED_NUMBER은, 다른 측면에서 API (16)

부터 사용할 수 있습니다

동일하지만 사용할 수있는 두 가지 방법으로 형식의 :

PhoneNumberUtils.compare(phoneNumber1, phoneNumber2) 

최저

아래 답변 중 하나를 만족하는 경우
관련 문제