Android: Kontaktname von der Telefonnummer abrufen

Ich möchte den Namen eines Kontaktes abrufen, der mit einer eingehenden Telefonnummer verbunden ist. Als ich die eingehende Nummer in der Broascastreceiver mit einem String mit dem Namen des eingehenden Anrufers verarbeitet, würde ich meinem Projekt sehr helfen.

Ich denke, das beinhaltet eine Abfrage mit der sql WHERE-Klausel als Filter, aber muss ich die Kontakte sortieren? Ein Beispiel oder ein Hinweis wäre eine große Hilfe.

  • Erstellen von Fremdschlüsselbeschränkungen in ORMLite unter SQLite
  • Scala Schauspieler auf Android
  • Bidi Rechts nach links in Firemonkey Mobile
  • Wie man apk Anwendung von meinem PC zu meinem mobilen Android zu installieren
  • wie man virtuelle Tastatur auf Berührung eines Spinners versteckt
  • Talking App wie reden Tom, Audio Recording nicht auf allen Geräten arbeiten
  • JNIEXPORT und JNICALL in Android NDK
  • RadioGroup mit Optionsfeldern in verschiedenen Layouts
  • Erstellen eines Android-Standortobjekts
  • Wie fülle man die leeren Räume mit Inhalt unter dem Bild in android
  • Android: Senden eines Bytes Arrays über Http POST
  • Zugriff auf eine passwortgeschützte URL
  • 5 Solutions collect form web for “Android: Kontaktname von der Telefonnummer abrufen”

    Dazu müssen Sie den optimierten PhoneLookup-Provider wie beschrieben verwenden. Die Berechtigung im Android-Manifest hinzufügen, dh READ_CONTACT

    public String getContactName(final String phoneNumber,Context context) { Uri uri=Uri.withAppendedPath(ContactsContract.PhoneLookup.CONTENT_FILTER_URI,Uri.encode(phoneNumber)); String[] projection = new String[]{ContactsContract.PhoneLookup.DISPLAY_NAME}; String contactName=""; Cursor cursor=context.getContentResolver().query(uri,projection,null,null,null); if (cursor != null) { if(cursor.moveToFirst()) { contactName=cursor.getString(0); } cursor.close(); } return contactName; } 

    Obwohl dies bereits beantwortet wurde, aber hier ist die komplette Funktion, um den Kontaktnamen aus der Nummer zu bekommen. Hoffe, es wird anderen helfen:

     public static String getContactName(Context context, String phoneNumber) { ContentResolver cr = context.getContentResolver(); Uri uri = Uri.withAppendedPath(PhoneLookup.CONTENT_FILTER_URI, Uri.encode(phoneNumber)); Cursor cursor = cr.query(uri, new String[]{PhoneLookup.DISPLAY_NAME}, null, null, null); if (cursor == null) { return null; } String contactName = null; if(cursor.moveToFirst()) { contactName = cursor.getString(cursor.getColumnIndex(PhoneLookup.DISPLAY_NAME)); } if(cursor != null && !cursor.isClosed()) { cursor.close(); } return contactName; } 

    [ Aktualisierung basiert auf Marcus Kommentar]

    Sie müssen um diese Erlaubnis bitten:

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

    Dies war sehr hilfreich, hier ist mein letzter Code für das Abrufen des Anrufers Name, id und Foto:

     private void uploadContactPhoto(Context context, String number) { Log.v("ffnet", "Started uploadcontactphoto..."); String name = null; String contactId = null; InputStream input = null; // define the columns I want the query to return String[] projection = new String[] { ContactsContract.PhoneLookup.DISPLAY_NAME, ContactsContract.PhoneLookup._ID}; // encode the phone number and build the filter URI Uri contactUri = Uri.withAppendedPath(ContactsContract.PhoneLookup.CONTENT_FILTER_URI, Uri.encode(number)); // query time Cursor cursor = context.getContentResolver().query(contactUri, projection, null, null, null); if (cursor.moveToFirst()) { // Get values from contacts database: contactId = cursor.getString(cursor.getColumnIndex(ContactsContract.PhoneLookup._ID)); name = cursor.getString(cursor.getColumnIndex(ContactsContract.PhoneLookup.DISPLAY_NAME)); // Get photo of contactId as input stream: Uri uri = ContentUris.withAppendedId(ContactsContract.Contacts.CONTENT_URI, Long.parseLong(contactId)); input = ContactsContract.Contacts.openContactPhotoInputStream(context.getContentResolver(), uri); Log.v("ffnet", "Started uploadcontactphoto: Contact Found @ " + number); Log.v("ffnet", "Started uploadcontactphoto: Contact name = " + name); Log.v("ffnet", "Started uploadcontactphoto: Contact id = " + contactId); } else { Log.v("ffnet", "Started uploadcontactphoto: Contact Not Found @ " + number); return; // contact not found } // Only continue if we found a valid contact photo: if (input == null) { Log.v("ffnet", "Started uploadcontactphoto: No photo found, id = " + contactId + " name = " + name); return; // no photo } else { this.type = contactId; Log.v("ffnet", "Started uploadcontactphoto: Photo found, id = " + contactId + " name = " + name); } 

    … dann mach einfach was du willst mit "input" (ihr Foto als InputStream), "name" und "contactId".

    Und hier sind die docs Auflistung der ~ 15 oder so Spalten, die Sie haben Zugriff auf, fügen Sie sie einfach auf die Projektion in der Nähe der Anfang des Codes oben: http://developer.android.com/reference/android/provider/ContactsContract. PhoneLookup.html

    Diese Version ist die gleiche wie Vikram.exe Antwort mit Code, um die ANR zu vermeiden

     interface GetContactNameListener { void contactName(String name); } public void getContactName(final String phoneNumber,final GetContactNameListener listener) { new Thread(new Runnable() { @Override public void run() { ContentResolver cr = getContentResolver(); Uri uri = Uri.withAppendedPath(ContactsContract.PhoneLookup.CONTENT_FILTER_URI, Uri.encode(phoneNumber)); Cursor cursor = cr.query(uri, new String[]{ContactsContract.PhoneLookup.DISPLAY_NAME}, null, null, null); if (cursor == null) { return; } String contactName = null; if(cursor.moveToFirst()) { contactName = cursor.getString(cursor.getColumnIndex(ContactsContract.PhoneLookup.DISPLAY_NAME)); } if(cursor != null && !cursor.isClosed()) { cursor.close(); } listener.contactName(contactName); } }).start(); } 

    Übergeben Sie die Kontaktnummer, von der Sie den Anruf in der folgenden Methode erhalten. Diese Methode prüft, ob der Kontakt in Ihrem Handy gespeichert ist oder nicht. Wenn der Kontakt gespeichert wird, gibt er den Kontaktnamen zurück, andernfalls gibt er eine Zeichenfolge unbekannte Nummer zurück

    Fügen Sie diesen Code in Ihre Broadcast-Empfängerklasse ein

      public String getContactDisplayNameByNumber(String number,Context context) { Uri uri = Uri.withAppendedPath(ContactsContract.PhoneLookup.CONTENT_FILTER_URI, Uri.encode(number)); name = "Incoming call from"; ContentResolver contentResolver = context.getContentResolver(); Cursor contactLookup = contentResolver.query(uri, null, null, null, null); try { if (contactLookup != null && contactLookup.getCount() > 0) { contactLookup.moveToNext(); name = contactLookup.getString(contactLookup.getColumnIndex(ContactsContract.Data.DISPLAY_NAME)); // this.id = // contactLookup.getString(contactLookup.getColumnIndex(ContactsContract.Data.CONTACT_ID)); // String contactId = // contactLookup.getString(contactLookup.getColumnIndex(BaseColumns._ID)); }else{ name = "Unknown number"; } } finally { if (contactLookup != null) { contactLookup.close(); } } return name; } 

    Source Source besuchen diesen Link

    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.