Android - 从所有来源获取所有联系人

时间:2010-01-01 03:39:18

标签: android contacts android-2.0-eclair

我一直在尝试制作一个针对2.0构建的Android应用程序,它需要获取所有用户的联系人并以格式化方式显示它们。

我已经能够使用CursorContactsContract.Contacts类获取列表。但是,我从该提供商处获得的列表仅向我提供来自用户的Google帐户的联系人,或者具有两个或更多来源的联系人(例如Google + Facebook,两个Facebook帐户等)。它没有给我整个列表。

那些似乎被遗漏的主要是那些仅来自用户的Facebook帐户,并且没有其他来源。

这是我正在使用的查询调用:

Cursor contactsCursor = getContentResolver()
    .query(android.provider.ContactsContract.Contacts.CONTENT_URI, 
        null, null, null, null);

我的问题是,是否可以从用户的电话簿中获取每个来源(Google,Facebook等)的所有联系人?

谢谢!

2 个答案:

答案 0 :(得分:2)

请参阅ContactManager

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