如何阅读服务中的收藏夹联系人?

时间:2011-12-16 12:20:12

标签: android android-contacts

我正在寻找一种方法来获取服务中收藏夹列表中的联系人电话号码或姓名无关紧要。任何人都能帮助我吗?

使用与此代码相关的任何代码

并不重要

我在developer.android.com中找到了这样的东西(IN_VISIBLE_GROUP)。 如何在我的情况下使用这个变量?

   case (PICK_CONTACT):
              if (resultCode == Activity.RESULT_OK) {
                      Uri contactData = data.getData();
                      Cursor c = managedQuery(contactData, null, null, null, null);
                      ContentResolver cr = getContentResolver();
                      if (c.moveToFirst()) {
                              String name = c.getString(c.getColumnIndexOrThrow(People.NAME));
                              String id =c.getString(c.getColumnIndexOrThrow(People._ID));
                              Cursor phones = cr.query(Phone.CONTENT_URI, null,
                                      Phone.CONTACT_ID + " = " + id, null, null);
}

3 个答案:

答案 0 :(得分:2)

让我们假设您正在按姓名搜索联系人。 如果要获取所有可能联系人的收藏夹值,请将选择参数放在给定代码中。

//首先从显示名称获取联系人ID: -

String displayName = "Albert Einstein";

Uri contacts = ContactsContract.Contacts.CONTENT_URI;

cur = cr.query(contacts, null, ContactsContract.Contacts.DISPLAY_NAME +"="+displayName,null, null);

int contactIdIndex = cur.getColumnIndex(ContactsContract.PhoneLookup._ID);

int contactId = cur.getInt(contactIdIndex);

//Make a query to get the Starred value:-

Cursor starred = cr.query(ContactsContract.Contacts.CONTENT_URI,
new String[] { ContactsContract.Contacts.STARRED },
ContactsContract.Contacts._ID + " = " + contactId,
null, null);

if (starred != null && starred.moveToFirst()) 
{
int fav = starred.getInt(0);
}

if (starred != null)
starred.close();            
}   

您可以放弃获取Contact ID的步骤,然后查询Starred值并根据显示名称直接查询

答案 1 :(得分:0)

这样的东西?

final private static class DataQuery {
    public static final int COLUMN_MIMETYPE = 1;
    public static final int COLUMN_PHONE = 2;
    public static final int COLUMN_RAWCONTACT_ID = 3; 
    public static final int COLUMN_PHONE_NUMBER = COLUMN_DATA1;
    public static final String[] PROJECTION = new String[] { Data._ID, Data.MIMETYPE, Data.DATA1, Data.RAW_CONTACT_ID };

    public static final String SELECTION_PHONE = Data.DATA1 + "=?";
}

long findContact(Context context, String number) {
    long rawContactId = -1;
    final Cursor cursor = context.getContentResolver().query(Data.CONTENT_URI, DataQuery.PROJECTION, DataQuery.SELECTION_PHONE, new String[] { number }, null);
    try {
        if (cursor.moveToFirst()) {
            rawContactId = cursor.getLong(DataQuery.COLUMN_RAWCONTACT_ID);
        }
    } finally {
        if (cursor != null)
            cursor.close();
    }
    return rawContactId;
}

答案 2 :(得分:0)

好的,让我们尝试一下......

    private static final Uri DATAGROUP_CONTENT_URI = ContactsContract.Data.CONTENT_URI.buildUpon().appendQueryParameter(Data.MIMETYPE, GroupMembership.CONTENT_ITEM_TYPE).build();

public static void querytGroups(Context context) {
    final ContentResolver resolver = context.getContentResolver();
    long groupid=getGroupId(resolver, "Family");

    final Cursor c = resolver.query(DATAGROUP_CONTENT_URI, DataQueryForContactsInGroup.PROJECTION, DataQueryForContactsInGroup.SELECTION, new String[] {ContactsContract.CommonDataKinds.GroupMembership.CONTENT_ITEM_TYPE, String.valueOf(groupid)}, null);

    try {
        while (c.moveToNext()) {
            final long rawContactId = c.getLong(DataQueryForContactsInGroup.RAW_CONTACT_ID);
            //do something
        } 
    }finally {
        c.close();
    }
}

private static long getGroupId(final ContentResolver resolver, String groupName) {
    long groupid = -1;
    Cursor cur = null;
    try {
        cur = resolver.query(Groups.CONTENT_URI, DataQueryForGroup.PROJECTION, DataQueryForGroup.SELECTION, new String[]{"%"+groupName+"%"}, null);         
        while (cur.moveToNext()) {
            return groupid= cur.getLong(DataQueryForGroup.GROUP_ID);
        } 
    }finally {
        if (cur!=null) cur.close();
    }
    return groupid;
}

private interface DataQueryForGroup {
    public final static String[] PROJECTION = new String[] {Groups._ID};
    public static final String SELECTION = Groups.TITLE+" LIKE ?";
    public final static int GROUP_ID = 0;
}

private interface DataQueryForContactsInGroup {
    public final static String[] PROJECTION = new String[] { Data.RAW_CONTACT_ID };
    public static final String SELECTION = "("+Data.MIMETYPE + "=?) and ("+ ContactsContract.CommonDataKinds.GroupMembership.GROUP_ROW_ID+ "=?)";
    public final static int RAW_CONTACT_ID = 0;
}

请注意,如果您的Google帐户不是英文帐户,则需要查找正确的群组名称