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 и т. Д.) В телефонной книге пользователя?

Спасибо!

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

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

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");
                  }
Другие вопросы по тегам