1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/coolxinxins-android_system_contacts

В этом репозитории не указан файл с открытой лицензией (LICENSE). При использовании обратитесь к конкретному описанию проекта и его зависимостям в коде.
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

Системные контакты Android

Введение

Операции CRUD с системными контактами Android

Инструкция по использованию

Лучше всего выполнять операции в сервисе, но метод onChange для системного мониторинга изменений контактов работает не очень хорошо, иногда вызывается несколько раз, что приводит к ANR.

  1. Этот запрос выполняется для полей, отображаемых на экране, оставшиеся поля запрашиваются в детальном представлении контакта. Преимущество этого подхода заключается в том, что каждый раз требуется запросить только одного человека, а не всех. Запрос оставшихся данных контакта выполняется очень быстро.
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));
    }
}
  1. Передача RawId, полученного на главном экране, в детальное представление контакта для запроса всех остальных данных.
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();
}
  1. xxxx

  2. Fork этого репозитория

  3. Создайте ветку Feat_xxx

  4. Сделайте коммиты

  5. Создайте Pull Request

Особенности Gitee

  1. Используйте Readme_XXX.md для поддержки разных языков, например Readme_en.md, Readme_zh.md
  2. Официальный блог Gitee blog.gitee.com
  3. Вы можете посетить https://gitee.com/explore для ознакомления с отличными открытыми проектами на Gitee
  4. GVP — это аббревиатура для самых ценных открытых проектов на Gitee, которые были выбраны Gitee как лучшие открытые проекты
  5. Официальное руководство по использованию Gitee https://gitee.com/help
  6. Gitee Stars — это рубрика для демонстрации достижений участников Gitee https://gitee.com/gitee-stars/

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Операции CRUD с контактами в системе Android Развернуть Свернуть
Отмена

Обновления

Пока нет обновлений

Участники

все

Язык

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/coolxinxins-android_system_contacts.git
git@api.gitlife.ru:oschina-mirror/coolxinxins-android_system_contacts.git
oschina-mirror
coolxinxins-android_system_contacts
coolxinxins-android_system_contacts
master