簡體   English   中英

Android檢索一組類似於內置聯系人應用程序的聯系人

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM