2016-04-24 19 views
3

vorhandene Ich möchte sehen, ob ein Kontakt in den Kontakten vorhanden database.I diesen Code aufkam haben:Kann nicht erkennen, Telefonnummer

public static boolean contactExists(Activity _activity, String number){ 
     Uri lookupUri = Uri.withAppendedPath(ContactsContract.PhoneLookup.CONTENT_FILTER_URI,Uri.encode(number)); 
     String[] mPhoneNumberProjection = { ContactsContract.PhoneLookup._ID, ContactsContract.PhoneLookup.NUMBER, ContactsContract.PhoneLookup.DISPLAY_NAME }; 
     Cursor cur = _activity.getContentResolver().query(lookupUri,mPhoneNumberProjection, null, null, null); 
     try { 
      if (cur.moveToFirst()) { 
       return true; 
      } 
     } finally { 
      if (cur != null) 
       cur.close(); 
     } 
     return false; 
    } 

Aber es gibt mir immer falsch, tho der Kontakt auf der existiert Gerät. Auch ich habe die Berechtigung in das Manifest integriert.

Antwort

3

Nach wenigen Stunden habe ich den Fehler gefunden haben, im Grunde auf einigen Geräten, dass der obige Code nicht work.To 100% sicher sein müssen Sie diesen Code verwenden passieren könnte: Wie

public String get_name() { 

     ContentResolver cr = getContentResolver(); 
     Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI, null, 
       null, null, null); 

     if (cur.getCount() > 0) { 

      while (cur.moveToNext()) { 
       String id = cur.getString(cur.getColumnIndex(ContactsContract.Contacts._ID)); 
       String name = cur.getString(cur.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)); 

       if (Integer.parseInt(cur.getString(cur.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0) { 

        System.out.println("name : " + name + ", ID : " + id); 
        if (name.equals(number)) { 
         title_holder = name; 
         break; 
        }else{ 
         title_holder = number; 
         break; 
        } 

       } 
      } 
     } 
     return title_holder; 
    } 

Sie sehen, dass es alle Kontakte vom Gerät auflistet, als Sie einfach überprüfen können, ob es mit der Nummer übereinstimmt, die Sie geben.

Eine einfachere Lösung:

String myPhone = getCallName.substring(16, getCallName.length() - 4); 

      if (!myPhone.matches("^[\\d]{1,}$")) { 
       myPhone = context.getString(R.string.withheld_number); 
      } else if (listDir.get(i).getUserNameFromContact() != myPhone) { 
       myPhone = listDir.get(i).getUserNameFromContact(); 
      } 
+0

Me wieder hier ist ein einfacher Ansatz auch als das, werde ich es am Ende hinzufügen. –

+1

Sie können Ihre eigene Antwort als die richtige Antwort markieren, um anderen Benutzern zu zeigen, dass Sie tatsächlich die richtige Antwort gefunden haben :-) – Darwind

+0

Ich weiß es, ich muss 24 Stunden warten, bis ich sie akzeptiere. –

Verwandte Themen