0

Я пытаюсь найти контакты по их отображаемому имени. Я воспользовался ссылкой из примера кода, приведенного на сайте разработчика Android.Android: Я пытаюсь найти контакты по их отображаемому имени

https://developer.android.com/training/contacts-provider/retrieve-names.html

В этом примере поиск выполняется из цельных контактов детали присутствуют в контакте не только от имени контактов.

Например, если у пользователя есть адрес электронной почты в его контактах, поиск выполняется в соответствии с электронными письмами. или если номер хранится в домашнем типе, то при вводе h также отображается номер, присутствующий в домашней категории.

Я хочу, чтобы поиск ограничивался их отображаемым именем.

 final static String SELECTION = 
      (Utils.hasHoneycomb() ? Contacts.DISPLAY_NAME_PRIMARY : Contacts.DISPLAY_NAME) + 
        "<>''" + " AND " + Contacts.IN_VISIBLE_GROUP + "=1"; 

Это предложение selecton, которое я использую, взятый из примера кода.

ответ

1

Try This

Cursor cursor = getContentResolver().query(
      android.provider.ContactsContract.Contacts.CONTENT_URI, 
      new String[] { ContactsContract.Contacts.PHOTO_ID, 
        ContactsContract.Contacts.DISPLAY_NAME, 
        ContactsContract.Contacts._ID }, 
      ContactsContract.Contacts.HAS_PHONE_NUMBER, null, 
      ContactsContract.Contacts.DISPLAY_NAME); 

Это cursor дает все контакты, которые имеют какой-либо номер телефона, а затем я сохранить уникальный ID в ArrayList как этот

cursor.moveToFirst(); 

    while (cursor.moveToNext()) { 
     contactsID.add(cursor.getString(2)); 
    } 

затем выбрать контакт я найти контактные номера с использованием этого

Cursor cursor = getContentResolver() 
        .query(android.provider.ContactsContract.CommonDataKinds.Phone.CONTENT_URI, 
          new String[] { 
            ContactsContract.CommonDataKinds.Phone.NUMBER, 
            ContactsContract.CommonDataKinds.Phone.CONTACT_ID, 
            ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME }, 
          ContactsContract.CommonDataKinds.Phone.CONTACT_ID 
            + " = ?", 
          new String[] { contactsID.get(position) }, null); 
      contactNumbers = new ArrayList<String>(); 
      while (cursor.moveToNext()) { 
       contactNumbers.add(cursor.getString(0)); 
       Log.d("number", cursor.getString(0)); 
      } 
+0

Где этот код? Вы проверили образец? –

0

код, который делает фильтрацию в Retrieving a List of Contacts учебнике здесь:

Uri contentUri = Uri.withAppendedPath(Contacts.CONTENT_FILTER_URI, Uri.encode(mSearchString)); 

В Contacts.CONTENT_FILTER_URI документах он говорит:

Строка фильтра будет использоваться для сопоставления различных частей контакта имя

Так что это не хорошо для вас, замените его:

@Override 
public Loader<Cursor> onCreateLoader(int loaderId, Bundle args) { 
    Uri contentUri = Contacts.CONTENT_URI; // no longer filters 
    String selection = Contacts.DISPLAY_NAME_PRIMARY + " LIKE %" + mSearchString + "%"; 

    return new CursorLoader(
      getActivity(), 
      contentUri, 
      PROJECTION, 
      selection, 
      null, 
      null 
    ); 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^