2

Я создаю пользовательский интерфейс, где мне нужно показать список контактов телефона в виде списка.Как отображать только телефонные контакты (исключая контакты SIM-карты)

Я использую ContactsContract.Data и CursorLoader, чтобы загрузить данные, а затем привязать курсор к пользовательскому адаптеру (расширенный от SimpleCursorAdapter).

Проблема в том, что я не могу понять, как отфильтровать контакты SIM-карты; на тестовом телефоне у меня одинаковые контакты на телефоне, а также на SIM-карте, что приводит к дублированию записей в списке. Если я удалю SIM-карту, дубликаты исчезнут.

Как отключить этот фильтр от контактов SIM-карты? Я ищу способ получить данные с помощью 1 запроса.

Это, как я загрузить мои данные на данный момент:

Uri queryUri = ContactsContract.Data.CONTENT_URI; 

String[] projection = new String[] { ContactsContract.Contacts._ID, ContactsContract.Contacts.DISPLAY_NAME, ContactsContract.Data.MIMETYPE, 
     ContactsContract.RawContacts.ACCOUNT_TYPE }; 

selection = ContactsContract.Contacts.IN_VISIBLE_GROUP + " = 1 AND IS_PRIMARY = 1 AND MIMETYPE = '" + Phone.CONTENT_ITEM_TYPE + "'"; 


cursorLoader = new CursorLoader(getActivity(), queryUri, projection, selection, null, ContactsContract.Contacts.DISPLAY_NAME); 

cursor = cursorLoader.loadInBackground(); 

//setup adapter, bind to listview etc.. 
+0

Никто? Неужели это так сложно? –

ответ

1

Фигурные это:

В основном то, что вам нужно:

Uri queryUri = ContactsContract.Contacts.CONTENT_URI; 

Это слушались адресной книги пользователя настройка - если пользователь отключил отображение контактов SIM-карты, результаты запроса автоматически исключают контакты SIM-карты.

Надеюсь, это поможет кому-то еще.