Как выбрать несколько контактов с телефона с помощью флажков

Я пытаюсь программно выбрать контакты, доступные на телефоне, и использую приведенный ниже код.

        Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
        intent.setType(ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE);
        startActivityForResult(intent, 1);

Однако возникает вопрос: как выбрать несколько контактов одновременно, установив флажок на странице контактов?


person Srikanth Pai    schedule 25.03.2013    source источник
comment
Возможно, это поможет: github.com/1gravity/Android-ContactPicker (я автор)   -  person Emanuel Moecklin    schedule 28.05.2016


Ответы (2)


Вам придется читать контакты программно и отображать их в виде ListView в вашем Activity. Используйте CheckBoxs в ListView элементах и ​​разрешите выбор нескольких элементов. Найдите простой пример/учебник для ListView и начните с него.

Есть несколько причин, по которым лучше создать собственный ListView, чем использовать Intent(Intent.ACTION_GET_CONTENT);:

  1. Может не быть способа выбрать несколько, как вы просили.
  2. Даже если вы найдете способ выбрать несколько, он будет отличаться для каждой версии ОС и устройства и может работать не на всех из них.
  3. Если на любом устройстве, которое может обрабатывать ACTION_GET_CONTENT, установлено несколько приложений, то пользователю будет представлен выбор, и он должен будет выбрать одно из них. Выбор пользователя может не поддерживать выбор нескольких контактов.

Вот пример, который читает ваши системные контакты:

Cursor cursor = getContentResolver().query(ContactsContract.Contacts.CONTENT_URI,null, null, null, null); 
while (cursor.moveToNext()) {
    String contactId = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID));
    String hasPhone = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER)); 
    String name = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
    if("1".equals(hasPhone) || Boolean.parseBoolean(hasPhone)) { 
        // You know it has a number so now query it like this
        Cursor phones = myActivity.getContentResolver().query( ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = "+ contactId, null, null); 
        while (phones.moveToNext()) { 
            String phoneNumber = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
            int itype = phones.getInt(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.TYPE));

            final boolean isMobile =
                itype == ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE ||
                itype == ContactsContract.CommonDataKinds.Phone.TYPE_WORK_MOBILE;

            // Do something here with 'phoneNumber' such as saving into 
            // the List or Array that will be used in your 'ListView'.

        } 
        phones.close();
    }
}
person David Manpearl    schedule 25.03.2013
comment
ответ ниже отлично работает без пользовательского списка :) см. @Gdroid - person Eran Levi; 23.01.2016
comment
Кажется, это работает только на устройствах Samsung, на которых есть специальное приложение для контактов, которое работает с этим конкретным намерением. Большинство устройств будут выдавать android.content.ActivityNotFoundException: No Activity found to handle Intent - person regev avraham; 23.07.2019

person    schedule
comment
Кажется, это работает только на устройствах Samsung, на которых есть специальное приложение для контактов, которое работает с этим конкретным намерением. Большинство устройств будут выдавать android.content.ActivityNotFoundException: No Activity found to handle Intent - person regev avraham; 23.07.2019