Intereting Posts
Eclipse – отключение компиляции XML-файлов в перспективе Java Слайд-анимация активности с переопределениемPendingTransition имеет странный эффект Android, TelephonyManager, радости PhoneStateListener и входящих номеров Notification.bigContentView устарел в API 24 (Нуга), что является альтернативой? Каковы возможные причины повреждения двоичных файлов на устройствах Android Android Ожидание намерения началось с notificaion, не заменит последний Как я могу узнать, сколько памяти мое приложение использует из своего бюджета VM? Инструкции погружного режима появляются каждый раз, когда устройство переходит в этот режим Начало работы с WiFi на Android Вызов метода может вызвать java NullpointerException Создание двух пользовательских кнопок Как я могу узнать результат моего календарного намерения? Как приостановить Httpurlconnection в android при нажатии кнопки Почему я получаю Некоторое хрустение файла не удалось после того, как я переименовал файл с возможностью рисования в .9.png? Почему onLoadFinished вызывается снова после возобновления фрагмента?

Выберите несколько контактов из телефонной книги в android

Мне нужно выбрать контактные телефоны / электронные письма из телефонной книги в Android.

Я видел выбор одного контакта и получение результата обратно в onActivityResult из этой ссылки .

Но мне нужно выбрать несколько контактов из телефонной книги. Как достичь этого?

Я не хочу создавать свой собственный список, есть ли способ использовать встроенные функции androids?

Solutions Collecting From Web of "Выберите несколько контактов из телефонной книги в android"

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

  getAllContacts(this.getContentResolver()); ListView lv = (ListView) findViewById(R.id.lv); ma = new MyAdapter(); lv.setAdapter(ma); lv.setOnItemClickListener(this); lv.setItemsCanFocus(false); lv.setTextFilterEnabled(true); // adding select = (Button) findViewById(R.id.button1); select.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { StringBuilder checkedcontacts = new StringBuilder(); for (int i = 0; i < name1.size(); i++) { if (ma.mCheckStates.get(i) == true) { checkedcontacts.append(name1.get(i).toString()); checkedcontacts.append("\n"); } else { } } Toast.makeText(Display.this, checkedcontacts, 1000).show(); } }); } @Override public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { // TODO Auto-generated method stub ma.toggle(arg2); } public void getAllContacts(ContentResolver cr) { Cursor phones = cr.query( ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null, null, null); while (phones.moveToNext()) { String name = phones .getString(phones .getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME)); String phoneNumber = phones .getString(phones .getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); name1.add(name); phno1.add(phoneNumber); } phones.close(); } class MyAdapter extends BaseAdapter implements CompoundButton.OnCheckedChangeListener { private SparseBooleanArray mCheckStates; LayoutInflater mInflater; TextView tv1, tv; CheckBox cb; MyAdapter() { mCheckStates = new SparseBooleanArray(name1.size()); mInflater = (LayoutInflater) Display.this .getSystemService(Context.LAYOUT_INFLATER_SERVICE); } @Override public int getCount() { // TODO Auto-generated method stub return name1.size(); } @Override public Object getItem(int position) { // TODO Auto-generated method stub return position; } @Override public long getItemId(int position) { // TODO Auto-generated method stub return 0; } @Override public View getView(final int position, View convertView, ViewGroup parent) { // TODO Auto-generated method stub View vi = convertView; if (convertView == null) vi = mInflater.inflate(R.layout.row, null); tv = (TextView) vi.findViewById(R.id.textView1); tv1 = (TextView) vi.findViewById(R.id.textView2); cb = (CheckBox) vi.findViewById(R.id.checkBox1); tv.setText("Name :" + name1.get(position)); tv1.setText("Phone No :" + phno1.get(position)); cb.setTag(position); cb.setChecked(mCheckStates.get(position, false)); cb.setOnCheckedChangeListener(this); return vi; } public boolean isChecked(int position) { return mCheckStates.get(position, false); } public void setChecked(int position, boolean isChecked) { mCheckStates.put(position, isChecked); } public void toggle(int position) { setChecked(position, !isChecked(position)); } @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { // TODO Auto-generated method stub mCheckStates.put((Integer) buttonView.getTag(), isChecked); } 

Похоже, нет такого «официального» способа. Ваш вопрос в основном такой же, как и этот. Как выбрать несколько контактов с Android SDK, который имеет ссылку на пользовательскую реализацию .

Если вы проверяете приложение AOSP Contacts, такой возможности нет в документации. Единственное, что я наблюдал из источника AOSP Contacts, – это следующее упоминание (в com.android.contacts.activities.PeopleActivity ):

 // TODO fix or remove multipicker code // else if (resultCode == RESULT_CANCELED && mMode == MODE_PICK_MULTIPLE_PHONES) { 

Из исходного кода приложения MMS Вы можете наблюдать следующее (в ComposeMessageActivity ):

 private void launchMultiplePhonePicker() { Intent intent = new Intent(Intents.ACTION_GET_MULTIPLE_PHONES); intent.addCategory("android.intent.category.DEFAULT"); intent.setType(Phone.CONTENT_TYPE); // We have to wait for the constructing complete. ContactList contacts = mRecipientsEditor.constructContactsFromInput(true); int urisCount = 0; Uri[] uris = new Uri[contacts.size()]; urisCount = 0; for (Contact contact : contacts) { if (Contact.CONTACT_METHOD_TYPE_PHONE == contact.getContactMethodType()) { uris[urisCount++] = contact.getPhoneUri(); } } if (urisCount > 0) { intent.putExtra(Intents.EXTRA_PHONE_URIS, uris); } startActivityForResult(intent, REQUEST_CODE_PICK); } 

Поле Intents.ACTION_GET_MULTIPLE_PHONES доступно в ContactsContract.java, но я не смог найти его использование в AOSP. Итак, я думаю, что это какой-то мертвый код или что действие обрабатывается в каком-то закрытом коде. Я попробовал то же самое, чтобы запустить выбор контактов из моего тестового приложения и получил только исключение из-за отсутствия приложения для обработки этого действия.

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