我一直在尝试制作一个针对2.0构建的Android应用程序,它需要获取所有用户的联系人并以格式化方式显示它们。
我已经能够使用Cursor
和ContactsContract.Contacts
类获取列表。但是,我从该提供商处获得的列表仅向我提供来自用户的Google帐户的联系人,或者具有两个或更多来源的联系人(例如Google + Facebook,两个Facebook帐户等)。它没有给我整个列表。
那些似乎被遗漏的主要是那些仅来自用户的Facebook帐户,并且没有其他来源。
这是我正在使用的查询调用:
Cursor contactsCursor = getContentResolver()
.query(android.provider.ContactsContract.Contacts.CONTENT_URI,
null, null, null, null);
我的问题是,是否可以从用户的电话簿中获取每个来源(Google,Facebook等)的所有联系人?
谢谢!
答案 0 :(得分:2)
OBS1 :此代码使用的是已弃用的方法managedQuery()
,您需要使用android.content.CursorLoader
重新实现此部分代码。
OBS2: mShowInvisible
- 如果为true则会列出所有联系人,无论用户偏好如何
/**
* Obtains the contact list for the currently selected account.
*
* @return A cursor for for accessing the contact list.
*/
private Cursor getContacts(){
// Run query
Uri uri = ContactsContract.Contacts.CONTENT_URI;
String[] projection = new String[] {
ContactsContract.Contacts._ID, ContactsContract.Contacts.DISPLAY_NAME
};
String selection = ContactsContract.Contacts.IN_VISIBLE_GROUP + " = '"(mShowInvisible ? "0" : "1") + "'";
String[] selectionArgs = null;
String sortOrder = ContactsContract.Contacts.DISPLAY_NAME + " COLLATE LOCALIZED ASC";
return managedQuery(uri, projection, selection, selectionArgs, sortOrder);
}
答案 1 :(得分:0)
我使用了这段代码并且非常好。
ContentResolver cr = getContentResolver();
Cursor cursor = cr.query(ContactsContract.Contacts.CONTENT_URI,null, null, null, null);
all_contacts_nu = cursor.getCount();
if(cursor!=null&&cursor.getCount()>0)
{
cursor.moveToFirst();
Log.i("MAHDI", "cursor.getCount()="+cursor.getCount());
for(int i =0;i<cursor.getCount();i++)
{
counter++;
FileDisplayActivity.this.get(cursor);
cursor.moveToNext();
writeToFile(vCard.get(i));
}
}
else
{
Log.d("TAG", "No Contacts in Your Phone");
}