Android — получить все контакты из всех источников

Я пытался создать приложение для Android, созданное для версии 2.0, которое требует получения всех контактов пользователя и их отображения в отформатированном виде.

Мне удалось получить список, используя классы Cursor и ContactsContract.Contacts. Однако список, который я получаю от этого провайдера, дает мне только контакты из учетной записи Google пользователя или контакты из двух или более источников (например, Google + Facebook, две учетные записи Facebook и т. д.). Он не дает мне весь список.

Те, которые кажутся упущенными, в основном поступают только из учетной записи пользователя Facebook и не имеют другого источника.

Это вызов запроса, который я использую:

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

Мой вопрос: возможно ли получить все контакты из каждого источника (Google, Facebook и т. д.) в телефонной книге пользователя?

Спасибо!


person Community    schedule 01.01.2010    source источник


Ответы (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);
}
person Panthro    schedule 04.04.2011

Я использовал этот код, и это довольно хорошо.

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");
                  }
person Mahdi    schedule 30.03.2015