根据Android中的GroupID获取联系人

use*_*201 1 java android android-contacts

我在这里遇到了一个问题,因为我刚开始为Android开发.我从官方Android网站" http://developer.android.com/training/contacts-provider/retrieve-names.html " 下载了该示例,该网站基本上能够检索显示手机中的所有联系人.我想添加的功能是只显示某个组中的联系人,如"朋友"(硬编码).

就我缩小范围而言,我必须改变选择部分

  final static String SELECTION =
            (Utils.hasHoneycomb() ? Contacts.DISPLAY_NAME_PRIMARY : Contacts.DISPLAY_NAME) +
            "<>''" + " AND " + Contacts.IN_VISIBLE_GROUP + "=1";
Run Code Online (Sandbox Code Playgroud)

这样的事情

  final static String SELECTION =
            Contacts.GroupID = "Friends";
Run Code Online (Sandbox Code Playgroud)

这给了我错误,因为它找不到列.

我非常渴望探索Android的潜力,但那令我头痛.

Omi*_*ifi 6

有两种获取组联系人列表的方法.首先,我想你有GroupId并希望得到相关的联系人列表.

String[] projection = {
            ContactsContract.Groups._ID,
            ContactsContract.Groups.TITLE,
            ContactsContract.Groups.ACCOUNT_NAME,
            ContactsContract.Groups.ACCOUNT_TYPE
    };
    return context.getContentResolver().query(
            ContactsContract.Groups.CONTENT_URI, projection, ContactsContract.Groups._ID + "=" + groupId , null, null
    );
Run Code Online (Sandbox Code Playgroud)

第二种方式: 我想您希望通过常量名称获取特定组的联系人.所以,你改变上面的代码就足够了:

context.getContentResolver().query(
            ContactsContract.Groups.CONTENT_URI, projection, ContactsContract.Groups.ACCOUNT_NAME + "='Friends'" , null, null
    );
Run Code Online (Sandbox Code Playgroud)

现在您有特定组的必要详细信息.然后你可以获取联系人列表的列表:

public static Cursor getContactsOfGroup(Group group) {
    // getting ids of contacts that are in this specific group
    String where = ContactsContract.CommonDataKinds.GroupMembership.GROUP_ROW_ID + "="
            + group.id + " AND "
            + ContactsContract.CommonDataKinds.GroupMembership.MIMETYPE + "='"
            + ContactsContract.CommonDataKinds.GroupMembership.CONTENT_ITEM_TYPE + "'";

    Cursor query = context.getContentResolver().query(
            ContactsContract.Data.CONTENT_URI,
            new String[] {
                    ContactsContract.CommonDataKinds.GroupMembership.CONTACT_ID
            }, where, null, ContactsContract.Data.DISPLAY_NAME + " COLLATE LOCALIZED ASC");

    String ids = "";
    for (query.moveToFirst(); !query.isAfterLast(); query.moveToNext()) {
        ids += "," + query.getString(0);
    }
    if (ids.length() > 0) {
        ids = ids.substring(1);
    }

    // getting all of information of contacts. it fetches all of number from every one
    String[] projection = new String[]{
            "_id",
            "contact_id",
            "lookup",
            "display_name",
            "data1",
            "photo_id",
            "data2", // number type: 1:home, 2:mobile, 3: work, else : other
    };
    String selection = "mimetype ='" + ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE + "'"
            + " AND account_name='" + group.accountName + "' AND account_type='" + group.accountType + "'"
            + " AND contact_id in (" + ids + ")";

    return context.getContentResolver().query(BASE_URI, projection, selection, null, null);
}
Run Code Online (Sandbox Code Playgroud)

请注意,在此方法的第二次提取中,我们检查accountNameaccountType以确保此记录与此组相关,因为可能存在为WhatsApp等其他应用程序存储的一些记录.我们不喜欢那些.好?

我希望对你有用.