У меня есть массив телефонных номеров, и я хочу получить соответствующие имена контактов из базы данных контактов.
В массиве телефонных номеров у меня также есть некоторые номера, которые ранее не сохраняются в базе данных контактов. Например:
- 3333333 → Тим
- 5555555 → Jim
- 1111111 → неизвестно
У меня есть массив, содержащий номера телефонов, показанные выше, а именно phoneArr.
int size=phoneArr.size();
if(size>0){
Cursor[] cursors=new Cursor[size];
for(int i=0;i<size;i++){
Uri contactUri1 = Uri.withAppendedPath(ContactsContract.PhoneLookup.CONTENT_FILTER_URI, Uri.encode(phoneArr.get(i)));
cursors[i] = getContentResolver().query(contactUri1, PEOPLE_PROJECTION, null, null, " _id asc limit 1");
}
Cursor phones=new MergeCursor(cursors);
phones.getCount() возвращает 2 в приведенном выше сценарии. Когда номер телефона не отображается в списке контактов, курсор становится пустым, и каким-то образом, когда я их объединяю, он ничего не способствует. Я хочу иметь курсор следующим образом
Телефон курсора → {tим, Джим, 1111111}
Я думаю, что могу сделать это, добавив строку вручную следующим образом:
Uri contactUri1 = Uri.withAppendedPath(ContactsContract.PhoneLookup.CONTENT_FILTER_URI, Uri.encode(phoneArr.get(i)));
cursors[i] = getContentResolver().query(contactUri1, PEOPLE_PROJECTION, null, null, " _id asc limit 1");
if(cursors[i].getCount()==0)
// add the phone number manually to the cursor
Как я могу это достичь?
Вот PEOPLE_PROJECTION
private static final String[] PEOPLE_PROJECTION = new String[] {
ContactsContract.PhoneLookup._ID,
ContactsContract.PhoneLookup.DISPLAY_NAME,
ContactsContract.PhoneLookup.NUMBER
};