6

Мне нужно найти контакт по номеру телефона. Вот код, который работает для извлечения контактов. уровень Android API, который я использую 15Android: Поиск Контакт по номеру телефона

 String[] projection = new String[] { 
       ContactsContract.CommonDataKinds.Phone._ID, 
       ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME, 
       ContactsContract.CommonDataKinds.Phone.TYPE, 
       ContactsContract.CommonDataKinds.Phone.NUMBER}; 

     Cursor query = mContent.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, projection, 
        ContactsContract.CommonDataKinds.Phone.NUMBER + " LIKE '%" + constraint.toString() + "%'" 
        ,null, ContactsContract.Contacts.DISPLAY_NAME + " COLLATE LOCALIZED ASC"); 

Я могу принести контакт, который не имеет места с телефонным номером сохранен в таблице контактов. Если номер телефона имеет пробел между ними, запрос выше не выполняется. Например, для контакта, если номер телефона сохранен как 1234567890, и когда я ищу со значением 1234, этот контакт будет восстановлен. Но не удается, если контакт сохраняется как «123 456 7890».

Подводя итог, когда я пытаюсь найти контакты, содержащие или содержащие «1234» с номером телефона, в результате следует вернуть мне контакты с номером телефона «1234567890» и «123 4567 890». Поскольку некоторые из телефонов android сохраняют номера телефонов с промежутком между ними.

Как это решить. Любая помощь приветствуется.

+0

Добавление '%' между всеми символами вашего 'ограничения 'будет одним из вариантов – venkatKA

+2

Короче говоря, для поиска по номеру телефона вам нужно использовать' ContactsContract.CommonDataKinds.Phone.NORMALIZED_NUMBER', который содержит номер телефона в ' E.164'. http://developer.android.com/reference/android/provider/ContactsContract.CommonDataKinds.Phone.html#NORMALIZED_NUMBER –

+0

@SarwarErfan Извините, я не могу использовать эту константу, уровень API, на котором я нахожусь, равен 15. 'ContactsContract.CommonDataKinds. Телефон.NORMALIZED_NUMBER' добавлен в API 16. – User12111111

ответ

0

Попробуйте это:

public String getContactNameByNumber(String number) { 
    Uri uri = Uri.withAppendedPath(ContactsContract.PhoneLookup.CONTENT_FILTER_URI, Uri.encode(number)); 
    String name = "?"; 

    ContentResolver contentResolver = getContentResolver(); 
    Cursor contact = contentResolver.query(uri, new String[] {BaseColumns._ID, 
      ContactsContract.PhoneLookup.DISPLAY_NAME }, null, null, null); 

    try { 
     if (contact != null && contact.getCount() > 0) { 
      contact.moveToNext(); 
      name = contact.getString(contactLookup.getColumnIndex(ContactsContract.Data.DISPLAY_NAME)); 
     } 
    } finally { 
     if (contact != null) { 
      contact.close(); 
     } 
    } 

    return name; 
} 
+0

Это возвращает мне контакт с номером телефона «123 456 7890», когда я пытаюсь выполнить поиск с «1234»? Я думаю, это работает, когда мы вводим полный номер телефона. – User12111111

+0

Да, это работает, когда мы вводим полный номер телефона. –

+1

Так что на мой вопрос, этот ответ не помогает. спасибо. – User12111111

-1

в вас код, чтобы изменить

constraint.toString() вместо записи constain.replaceAll (»», "");

что удалить все пространство из строки

+1

Чтобы было ясно, я пытаюсь найти контакты, которые начинаются с «1234», в результате должны вернуть мне контакты с номером телефона «1234567890» и «123 4567 890». Некоторые из устройств Android сохраняют контакт с пространством. Как я могу получить оба.? – User12111111

-1

попробовать это:

String whereName = ContactsContract.Data.MIMETYPE + " = ?"; 
String number; 
String[] whereNameParams = new String[] { ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE }; 
Cursor nameCur = con.query(ContactsContract.Data.CONTENT_URI, null, whereName, whereNameParams, ContactsContract.CommonDataKinds.Phone.NUMBER); 


while (nameCur.moveToNext()) { 
    number = nameCur.getString(nameCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); 

    if (number != null) { 
     if (number.contains(num)) { 
      System.out.println(number); 

     } 
    } 

} 
nameCur.close(); 

В вверх Комментарий ответ сказал, что: «Я пытаюсь найти контакты, которая начинается с„1234“, в результате должен верните мне контакты с номером телефона «1234567890» и «123 4567 890».

Мой код решает эту проблему.

+1

Здравствуйте, пожалуйста, добавьте какое-то объяснение к вашему ответу – User2012384

+0

, вы скорее объясните, почему ваш код решит оп. Вопрос. –

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