2011-12-16 69 views
0

我正在寻找一种方法来获取电话号码或名称中的收藏夹列表中的联系人服务内容无关紧要。谁能帮我这个?如何阅读服务中的收藏夹联系人?

这不是重要的是使用与此相关的代码

我在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); 
} 

回答

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();    
} 

可以删除获得联系ID,然后查询出演价值,并直接查询基于显示名称的步骤

+0

一个100000000000000000谢谢 :) 我可以做这个家庭组? 如果我可以你可以请告诉我如何 :) – 1093822 2011-12-17 20:46:15

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; 
} 
+0

感谢您的答复,但它没有作用 我有电话号码和联系人姓名和联系ID ,但我只是想知道,以检查此人魔女组他属于 :( – 1093822 2011-12-16 19:43:31

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; 
} 

请考虑,如果你的谷歌帐户不是英语,你需要寻找适当的组名

+0

1000000000000000000000000000000000谢谢:)你是真棒男人:) – 1093822 2011-12-19 20:41:07