Эффективный способ получить контактную информацию с фото

1

Я хочу получить базовую информацию обо всех контактах (я использую api lvl 8). В настоящее время я использую этот фрагмент кода

private List<ContactInfo> readContacts() {

    ContentResolver cr = getContentResolver();
    Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI, null,
            null, null, Phone.DISPLAY_NAME + " ASC");

    for (int i = 0; i < cur.getColumnCount(); i++) {

        Log.v("COlum", cur.getColumnName(i));

    }
    List<ContactInfo> temp = new ArrayList<ContactInfo>();
    if (cur.getCount() > 0) {

        while (cur.moveToNext()) {
            ContactInfo mContactInfo = new ContactInfo();
            String id = cur.getString(cur
                    .getColumnIndex(ContactsContract.Contacts._ID));
            mContactInfo.setId(Long.parseLong(id));
            String name = cur
                    .getString(cur
                            .getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
            if (Integer
                    .parseInt(cur.getString(cur
                            .getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0) {
                mContactInfo.setmDisplayName(name);

                // get the <span class="IL_AD" id="IL_AD7">phone
                // number</span>
                Cursor pCur = cr.query(
                        ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
                        null,
                        ContactsContract.CommonDataKinds.Phone.CONTACT_ID
                                + " = ?", new String[] { id }, null);
                while (pCur.moveToNext()) {
                    String phone = pCur
                            .getString(pCur
                                    .getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));

                    mContactInfo.setmPhoneNumber(phone);
                }
                pCur.close();

                // get email and type

                Cursor emailCur = cr.query(
                        ContactsContract.CommonDataKinds.Email.CONTENT_URI,
                        null,
                        ContactsContract.CommonDataKinds.Email.CONTACT_ID
                                + " = ?", new String[] { id }, null);
                while (emailCur.moveToNext()) {
                    // This would allow you get several email <span
                    // class="IL_AD" id="IL_AD9">addresses</span>
                    // if the email addresses were stored in an array
                    String email = emailCur
                            .getString(emailCur
                                    .getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA));

                    mContactInfo.setmEmail(email);
                }
                emailCur.close();

                temp.add(mContactInfo);
            }
        }
    }
    return temp;

}

и перейти к пользовательскому адаптеру (расширенный базовый адаптер). Я получаю контактную фотографию, используя:

public static Bitmap loadContactPhoto(ContentResolver cr, long id) {
        Uri uri = ContentUris.withAppendedId(
                ContactsContract.Contacts.CONTENT_URI, id);
        InputStream input = openContactPhotoInputStream1(cr, uri);
        if (input == null) {
            return null;
        }
        return BitmapFactory.decodeStream(input);
}

Я тестировал на своем телефоне с 2x контактами (имел фотографию). Я взял ~ 10 с, чтобы получить все контакты в 1-м режиме. Я пытаюсь закрыть настройки приложения и снова запустить. На этот раз потребовалось ~ 2 с для получения данных. Поэтому я хочу узнать наиболее эффективный способ получить информацию о контактах.

Я нашел несколько похожих вопросов, но им не нужна фотография. контакты в android Я пробовал использовать курсор и адаптер курсора, но я не знаю, какой запрос будет получать имя_каталога + имя контакта одновременно.

Изменить: я удалил все getColumnIndex, я могу выйти из цикла и только столбца проекта, который я хочу. Эффективность лучше (10s = > 5 с).

Что я хочу знать: Лучший способ запросить информацию и установить мою модель ContactInfo или запрос, который одновременно получает имя, номер телефона, адрес электронной почты, фотографию для перехода к адаптеру курсора.

Заранее спасибо

Теги:
cursor
contacts
android-contacts

2 ответа

2
Лучший ответ

Я изменил на CusorAdapter и использовал ContactsPhotoLoader из приложения "Контакты" и производительность улучшена.

  • 1
    Привет, спасибо за ссылку. Можете ли вы дать пример, как именно это решить? Заранее спасибо.
0

Чтобы получить контактную информацию, вам нужно работать с API контактов Android. Также вам нужно держать в мин, что вам придется обрабатывать этот Api по-другому для android api ниже API 4 (1.6) и для Android API 5 (2.0) и выше:

Я расскажу вам о хороших ссылках, которые помогут вам:

получить контактную информацию с помощью панели контактов android

Получение фотографии из контакта

  • 0
    Я просмотрел все ваши ссылки, прежде чем задавать этот вопрос :(. Что я хочу, так это как получить информацию быстрее.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню