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