2010-02-03 8 views
6

Wenn ein Android-Telefon einen Anruf empfängt, überprüft es automatisch, ob der Anruf in seiner eigenen Kontaktdatenbank vorhanden ist. Ich habe mich gefragt, ob es eine einfache Möglichkeit gibt, auf diese Informationen zuzugreifen. Ich habe eine PhoneStateListener, die bestimmte Aktionen während eines Rufzustands ausführt, und ich möchte überprüfen, ob der eingehende Anrufer in der Kontaktliste ist.Gibt es eine einfache Möglichkeit zu überprüfen, ob ein eingehender Anrufer ein Kontakt in Android ist?

Gibt es eine Möglichkeit, dies zu tun, ohne die Kontakte ContentProvider zu durchlaufen?

+0

Darf ich fragen, warum Sie nicht Willst du es über den Content-Provider machen? Abhören für einen eingehenden Anruf, Abrufen der Nummer und dann überprüfen, ob es in der Content-Provider scheint der logische Weg, um es zu tun? –

+0

Sie haben Recht, es wäre ein guter Weg zu gehen, aber ich möchte es wegen Komplikationen in Bezug auf den Telefon "Typ" vermeiden. Da ein Benutzer die Telefonnummer eines Kontakts in eine beliebige Kategorie (z. B. "Arbeit", "Andere" oder sogar eine benutzerdefinierte Telefonnummer) eingeben kann, wird es hässlich, alle Felder zu durchsuchen, um eine Übereinstimmung zu finden. Außerdem müssen die Nummern standardisiert formatiert werden. Fehle ich etwas sehr einfaches? Wenn nicht, würde ich mich lieber von diesem Chaos fernhalten. – gggritso

+0

Der Code von Christopher unten sollte gut funktionieren, ich verwende etwas ähnliches, um eine ausgehende Nummer zu überprüfen, und es prüft alle Felder ohne Verzögerung in der Verarbeitung –

Antwort

5

Die Telefon App verwendet die Kontakte ContentProvider auch; Ich bin mir nicht sicher, warum du das vermeiden willst. Außerdem ist es die einzige öffentlich zugängliche Möglichkeit, auf diese Informationen zuzugreifen.

eine Nummer zu einem Namen auflöst (pre 2.0, in diesem Fall) ohnehin genug einfach:

Uri uri = Uri.withAppendedPath(Phones.CONTENT_FILTER_URL, Uri.encode(number)); 

String name = null; 
Cursor cursor = context.getContentResolver().query(uri, 
        new String[] { Phones.DISPLAY_NAME }, null, null, null); 
if (cursor != null && cursor.moveToFirst()) { 
    name = cursor.getString(cursor.getColumnIndex(Phones.DISPLAY_NAME)); 
    cursor.close(); 
} 
+0

Aha! Ich wusste, dass ich irgendwo mit den URIs verwirrt war! Vielen Dank, das hat wie ein Zauber funktioniert. – gggritso

+1

Ja, dieser Anbieter-URI übernimmt die gesamte Formatierung und Anpassung der Zahlen für Sie. Sie müssen sich darum keine Sorgen machen. –

3

Hier ist der Code für 2.0 und später

Uri uri = Uri.withAppendedPath(PhoneLookup.CONTENT_FILTER_URI, Uri.encode(phoneNumber)); 
    Cursor cursor = resolver.query(uri, new String[]{PhoneLookup.DISPLAY_NAME}, null, null, null);   

    if (cursor != null && cursor.moveToFirst()) { 
     String name = cursor.getString(0); 
     cursor.close(); 
    } 
+0

anstelle von PhoneLookup können wir nicht einfach Telefon benutzen? –

Verwandte Themen