2010-01-01 111 views
3

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

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

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

这是查询呼叫我使用:

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

我的问题是是否有可能得到的所有来自用户的电话簿中的每一个源(谷歌,Facebook等)的接触?

谢谢!

回答

2

ContactManager

OBS1:该代码使用的方法已过时,​​你需要重写使用android.content.CursorLoader的这部分代码。

OBS2:mShowInvisible - 如果真会列出所有的联系人,无论用户偏好

/** 
* 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); 
} 
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"); 
        } 
相关问题