2014-06-18 166 views
0

當前在我的應用程序中,我使用跟蹤光標查詢獲取所有聯繫人。獲取「正常」聯繫人

String[] columnsToReturn = new String[] { 
    ContactsContract.Contacts._ID, 
    ContactsContract.Contacts.DISPLAY_NAME_PRIMARY 
}; 

Cursor contactsCursor = getActivity().getContentResolver().query(ContactsContract.Contacts.CONTENT_URI, columnsToReturn, null, null, null); 

這將返回所有聯繫人,包括Skype,WhatsApp等我不想要這些。我只想要「正常」的。那些不適用於任何應用程序的,只是存儲在您的Google帳戶中的應用程序。我該怎麼做呢?

另外,我可以排除用戶自己的條目嗎?例如,我的名字在我的所有不同的電子郵件地址列表上多次出現。

回答

0

ContactsContract.Contacts表包含「合併」聯繫人。

...代表相同的 個人的原始聯繫人總數的記錄。

如果要查詢特定帳戶或帳戶類型的聯繫人,則需要使用RawContacts。例如,對於Google聯繫人,這將是:

Cursor c = getContentResolver().query(
     RawContacts.CONTENT_URI, 
     new String[] { RawContacts.CONTACT_ID, RawContacts.DISPLAY_NAME_PRIMARY }, 
     RawContacts.ACCOUNT_TYPE + "= ?", 
     new String[] { "com.google" }, 
     null); 

ArrayList<String> myContacts = new ArrayList<String>(); 
int contactNameColumn = c.getColumnIndex(RawContacts.DISPLAY_NAME_PRIMARY); 
while (c.moveToNext()) 
{ 
    // You can also read RawContacts.CONTACT_ID to read the 
    // ContactsContract.Contacts table or any of the other related ones. 
    myContacts.add(c.getString(contactNameColumn)); 
}