[英]Android retrieve a set of contacts similar to built in Contacts app
我正在使用如下代碼,在我的手機上它返回4000多個行,但是在我的手機上,“聯系人”應用中有295個聯系人。
這里發生了什么? 我一直在閱讀通訊錄數據庫,但我還不足夠了解這一點。
謝謝!
final ContentResolver cr = getContentResolver();
final Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);
List<Contact> contacts = new ArrayList<>();
final int nameIdx = cur.getColumnIndex(DISPLAY_NAME);
final int idIdx = cur.getColumnIndex(ContactsContract.Contacts._ID);
while (cur.moveToNext()) {
String name = cur.getString(nameIdx);
String id = cur.getString(idIdx);
contacts.add(new Contact(name, id));
}
cur.close();
解決方案是過濾具有IN_VISIBLE_GROUP = 1的聯系人。
final String selection = String.format("%s = ?", ContactsContract.Contacts.IN_VISIBLE_GROUP);
final String[] selectionArgs = new String[] { "1" };
final Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI, projection, selection, selectionArgs, null);
我還嘗試了IN_DEFAULT_DIRECTORY = 1,該方法也很好用,但僅在Lollipop(21)和更高版本上受支持。
我在Android 6中遇到類似的問題。當您使用進行查詢時,某些聯系人沒有顯示
ContactsContract.Contacts.IN_VISIBLE_GROUP = 1
然后我將選擇更改為
String selection = "in_default_directory = 1"; // Aka ContactsContract.ContactsColumns.IN_DEFAULT_DIRECTORY
String[] selectionArgs = null;
String sortOrder = ContactsContract.Contacts.DISPLAY_NAME + " COLLATE LOCALIZED ASC";
Cursor nameCursor = context.getContentResolver().query(uri, null, selection, selectionArgs, sortOrder);
現在,它會根據“聯系人”應用返回所有聯系人。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.