2010-01-01 6 views
3

J'ai essayé de faire une application Android, construite contre 2.0, qui nécessite d'obtenir tous les contacts de l'utilisateur et de les afficher de manière formatée.Android - Obtenir tous les contacts de toutes les sources

J'ai été en mesure d'obtenir une liste en utilisant un Cursor et la classe ContactsContract.Contacts. Cependant, la liste que je reçois de ce fournisseur ne me donne que les contacts qui proviennent soit du compte Google de l'utilisateur, soit des contacts qui ont deux sources ou plus (par exemple Google + Facebook, deux comptes Facebook, etc.). Cela ne me donne pas toute la liste. Ceux qui semblent exclus sont principalement ceux qui viennent uniquement du compte Facebook de l'utilisateur, et n'ont pas d'autre source.

C'est l'appel de requête J'utilise:

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

Ma question est est-il possible d'obtenir tous les contacts de chaque source (Google, Facebook, etc.) dans le répertoire de l'utilisateur?

Merci!

Répondre

2

Voir ContactManager

OBS1: ce code utilise une méthode désapprouvée, managedQuery() vous aurez besoin de ré-écrire cette partie du code à l'aide d'un android.content.CursorLoader.

OBS2:mShowInvisible - si cela est vrai listera tous les contacts quelle que soit la préférence de l'utilisateur

/** 
* 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

J'ai utilisé ce code et il est assez bon.

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