2010-02-01 4 views
16

Ich versuche, den Namen des Absenders mit einem Inhaltsanbieter aus der Kontaktdatenbank zu erhalten.Wie sucht man den Namen eines Kontakts von seiner Telefonnummer auf Android?

Das Problem ist, ich weiß nicht, wie man es implementiert. Wie jetzt kann ich nur die Telefonnummer aus der SMS-Nachricht ziehen. Ich muss überprüfen, ob die Telefonnummer, die angerufen wird, in den Kontakten des Benutzers zuerst ist, und wenn es den Namen anzeigt, wenn es nicht ist, dann zeige die Nummer an.

+3

Sie wahrscheinlich diese Frage zu so etwas wie ‚verallgemeinern Wie suchen Sie einen Kontakt nach oben eine rohe, unformatierte Telefonnummern-Zeichenfolge gegeben? –

Antwort

24

Ja, dies ist möglich mit ContactsContract.PhoneLookup.CONTENT_FILTER_URI in Android 2.0 und höher und Contacts.Phones.CONTENT_FILTER_URL in Android 1.6 und früher.

Zum Beispiel Verwendung, siehe die Dokumentation für ContactsContract.PhoneLookup. Auszug unten:

// Android 1.6 and earlier (backwards compatible for Android 2.0+) 
Uri uri = Uri.withAppendedPath(Contacts.Phones.CONTENT_FILTER_URL, Uri.encode(phoneNumber)); 

// Android 2.0 and later 
Uri uri = Uri.withAppendedPath(ContactsContract.PhoneLookup.CONTENT_FILTER_URI, Uri.encode(phoneNumber)); 

// Query the filter URI 
String[] projection = new String[]{ PhoneLookup.DISPLAY_NAME, ... 
Cursor cursor = context.getContentResolver().query(uri, projection, ... 

UPDATE: Das Format der Telefonnummer spielt keine Rolle. Der Vergleich ist robust und auf Android optimiert; Es ist mit einer nativen SQLite-Funktion namens PHONE_NUMBERS_EQUAL getan. Für weitere Details, search the codebase for this method. Übrigens bin ich mir nicht sicher, ob es sicher ist, diese Funktion direkt in Ihren eigenen Apps zu verwenden, aber ich würde es nicht tun.

+2

Was genau geht in den Rest dieser Abfrage? Diese Antwort ist nicht viel hilfreicher als die bereits vorhandene Dokumentation. – eternalmatt

+4

Ist das Format der Telefonnummer wichtig? Das heißt, werden '(555) 555-5555' und' 555-555-5555' beide mit '555555555' übereinstimmen? –

+0

Ist das Format der Telefonnummer wichtig? Das heißt, werden (555) 555-5555 und 555-555-5555 beide 555555555 entsprechen? [2] –

19

Hier ist, was ich

ContentResolver localContentResolver = this.mContext.getContentResolver(); 
Cursor contactLookupCursor = 
    localContentResolver.query(
      Uri.withAppendedPath(PhoneLookup.CONTENT_FILTER_URI, 
      Uri.encode(phoneNumber)), 
      new String[] {PhoneLookup.DISPLAY_NAME, PhoneLookup._ID}, 
      null, 
      null, 
      null); 
try { 
while(contactLookupCursor.moveToNext()){ 
    String contactName = contactLookupCursor.getString(contactLookupCursor.getColumnIndexOrThrow(PhoneLookup.DISPLAY_NAME)); 
    String contactId = contactLookupCursor.getString(contactLookupCursor.getColumnIndexOrThrow(PhoneLookup._ID)); 
    Log.d(LOGTAG, "contactMatch name: " + contactName); 
    Log.d(LOGTAG, "contactMatch id: " + contactId); 
    } 
} finally { 
contactLookupCursor.close(); 
} 

in Ihrer Telefonnummer Passing habe bereits Sie haben in Uri.encode (phonenumber)

+0

danke es hat mir geholfen – Sando

+0

Mehr gute Beispiele hier: http://StackOverflow.com/Questions/3079365/android-retrieve-Contact-name-from-phone-Number/8695649 – mdaddy

+0

Das hat mir sehr geholfen. Danke Andrew, nur eine kleine Frage. Gibt es eine Möglichkeit, diesen Code ein wenig mehr zu ändern und eine Telefonnummer beim Suchen nach einer Telefonnummer zu suchen? Nehmen wir an, meine Nummer ist 444 886 444. Ich erinnere mich zufällig an "886", nicht an den Rest. Es sollte suchen und zusammenpassen und mir ein paar Ergebnisse geben. Wenn Sie bereit sind, meinen Kommentar zu beantworten, würde es sehr geschätzt werden. Wenn jemand einen Link für diese Art von Sache hat, bitte posten. Danke im Voraus! – Paramone

Verwandte Themen