Android Multiple Contacts Chooser (с возможностью выбора номера телефона)

Мне нужно иметь возможность выбирать несколько контактов в Android. Поток выглядит следующим образом:

  1. Пользователь нажимает кнопку, которая открывает приложение «Контакты».
  2. Однако вместо того, чтобы выбирать один контакт, мне нужно иметь возможность выбирать несколько контактов (в том же запуске намерения).
  3. Если контакт имеет несколько телефонных номеров, мне нужно, чтобы пользователь мог выбрать, какой номер телефона он хочет выбрать.

Эта функция уже присутствует на моем Android-телефоне Samsung (Running 2.3 Gingerbread), когда я нажимаю «Контакты» в приложении «Сообщения». Смотрите снимок экрана ниже:

Введите описание изображения здесь

Введите описание изображения здесь

Введите описание изображения здесь

Существует не встроенный способ сделать это, поэтому вам нужно сделать большую часть работы самостоятельно. К счастью, это не так сложно.

дисплей

Для отображения ваших контактов вы можете использовать либо просмотр в режиме выбора нескольких избранных, либо создать пользовательский адаптер и связать его с обычным списком. Я не думаю, что listview с multi-select позволит вам помещать что-либо кроме текста для каждой строки, но вам нужно будет копать глубже, чтобы узнать.

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

Учебное пособие по пользовательскому адаптеру

С помощью пользовательской настройки адаптера вы можете создавать объекты данных со всей информацией для человека, включая их имя и номер телефона. В getView вашего пользовательского адаптера вы можете решить, что / как и где отображать каждую часть информации.

Собирая информацию

Чтобы получить информацию для ваших контактов, вам необходимо использовать ContactContract API.

Контактная информация для чтения

Чтение ВСЕХ телефонных номеров для контакта

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

К сожалению, этот код не поддерживается для всех версий Android

Я знаю, что это было поздно, но хотел поделиться этим! Я нашел некоторый неполный код в сети, и после взлома моей головы я наконец нашел ответ! В основном вы запускаете сборщик и позволяете ему возвращать данные в extras =]

В сети не было полного ответа, поэтому надейтесь, что это поможет какой-то душе!

Наслаждаться:

  public void pickContact(View v){ try { Intent phonebookIntent = new Intent("intent.action.INTERACTION_TOPMENU"); phonebookIntent.putExtra("additional", "phone-multi"); startActivityForResult(phonebookIntent, PICK_CONTACT); // PICK_CONTACT IS JUST AN INT HOLDING SOME NUMBER OF YOUR CHOICE } catch (Exception e) { e.printStackTrace(); } } public String getData(String contact, int which) { return contact.split(";")[which]; } public void onActivityResult(int reqCode, int resultCode, Intent data) { final int URI = 0; final int NUMBER = 1; if (RESULT_OK != resultCode) return; Bundle contactUri = data.getExtras(); if (null == contactUri) return; ArrayList<String> contacts = (ArrayList<String>)contactUri.get("result"); Toast.makeText(getApplicationContext(), getData(contacts.get(0),NUMBER), Toast.LENGTH_SHORT).show(); }