Операции CRUD с системными контактами Android
Лучше всего выполнять операции в сервисе, но метод onChange для системного мониторинга изменений контактов работает не очень хорошо, иногда вызывается несколько раз, что приводит к ANR.
private void updateContactsInfo() {
startTime = System.currentTimeMillis();
Uri phoneUri = ContactsContract.CommonDataKinds.Phone.CONTENT_URI; // Uri контактов;
// Поля для запроса
String[] phoneProjection = {
ContactsContract.CommonDataKinds.Phone.CONTACT_ID, // ID контакта
ContactsContract.CommonDataKinds.Phone.RAW_CONTACT_ID,
ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME, // Имя
ContactsContract.CommonDataKinds.Phone.DATA, // Конкретные данные
PHONE_BOOK_LABLE, // Первая буква
ContactsContract.CommonDataKinds.Phone.PHOTO_ID // ID изображения
};
// Сортировка по sort_key в порядке возрастания
mQueryHandler.startQuery(0, null, phoneUri, phoneProjection, null, null,
ContactsContract.CommonDataKinds.Phone.SORT_KEY_PRIMARY);
}
public class MyAsyncQueryHandler extends AsyncQueryHandler {
public MyAsyncQueryHandler(ContentResolver resolver) {
super(resolver);
}
@Override
protected void onQueryComplete(int token, Object cookie, Cursor cursor) {
super.onQueryComplete(token, cookie, cursor);
mContactList.clear();
if (cursor != null && cursor.getCount() > 0) {
cursor.moveToFirst();
for (int i = 0; i < cursor.getCount(); i++) {
cursor.moveToPosition(i);
int contactId = cursor.getInt(0);
int rawId = cursor.getInt(1);
String name = cursor.getString(2);
String number = cursor.getString(3);
String sortKey = cursor.getString(4);
long photoId = cursor.getLong(5);
// Создание объекта контакта
SortModel contact = new SortModel();
contact.setSort_id(contactId);
contact.setRawId(rawId);
contact.setName(name);
contact.setNumber(number);
contact.setSortKey(sortKey);
contact.setPhotoId(photoId);
contact.setSortLetters(sortKey);
mContactList.add(contact);
if (photoId != 0) {
Bitmap bitmap = ContactsTools.getPhoto(contactId, MainActivity.this);
contact.setBtHead(bitmap);
}
}
}
adapter.notifyDataSetChanged();
adapter.updateListView(mContactList);
Log.d(TAG, "loadContacts time = " + (System.currentTimeMillis() - startTime));
}
}
mContactId = getIntent().getIntExtra("raw_contact_id", 0);
if (mContactId > 0) {
// Запрос данных из таблицы data по raw_contact_id для получения адреса и электронной почты контакта
ContentResolver contentResolver = this.getContentResolver();
Cursor cursor = contentResolver.query(ContactsContract.CommonDataKinds.Email.CONTENT_URI,
new String[]{ContactsContract.CommonDataKinds.Email.DATA},
ContactsContract.CommonDataKinds.Email.RAW_CONTACT_ID + "=?", new String[]{String.valueOf(mContactId)}, null);
while (cursor.moveToNext()) {
String email = cursor.getString(0);
tvEmail.setText(email);
MyApplication.sortModel.setEmail(email);
}
cursor.close();
Cursor cursor1 = contentResolver.query(ContactsContract.CommonDataKinds.StructuredPostal.CONTENT_URI, new String[]{ContactsContract.CommonDataKinds.StructuredPostal.STREET,
ContactsContract.CommonDataKinds.StructuredPostal.POBOX, ContactsContract.CommonDataKinds.StructuredPostal.NEIGHBORHOOD,
ContactsContract.CommonDataKinds.StructuredPostal.CITY, ContactsContract.CommonDataKinds.StructuredPostal.REGION, ContactsContract.CommonDataKinds.StructuredPostal.POSTCODE},
ContactsContract.CommonDataKinds.StructuredPostal.RAW_CONTACT_ID + "=?", new String[]{String.valueOf(mContactId)}, null);
while (cursor1.moveToNext()) {
String street = cursor1.getString(0);
String pobx = cursor1.getString(1);
String community = cursor1.getString(2);
String city = cursor1.getString(3);
String region = cursor1.getString(4);
String postCode = cursor1.getString(5);
StringBuilder sb = new StringBuilder();
if (street != null) {
sb.append(street);
}
if (pobx != null) {
sb.append(pobx);
}
if (community != null) {
sb.append(community);
}
if (city != null) {
sb.append(city);
}
if (region != null) {
sb.append(region);
}
if (postCode != null) {
sb.append(postCode);
}
tvAddress.setText(sb.toString());
MyApplication.sortModel.setAddress(sb.toString());
}
cursor1.close();
}
xxxx
Fork этого репозитория
Создайте ветку Feat_xxx
Сделайте коммиты
Создайте Pull Request
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )