pasar - Seleccione mĂșltiples contactos de la agenda en Android
contactos google (2)
Estoy compartiendo el código para seleccionar varios contactos de la Libreta de teléfonos. Has cambiado poco y puedes lograr tu objetivo. Gracias
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);
}
Necesito seleccionar números de contacto / correos electrónicos de la guía telefónica en Android.
He visto seleccionar un contacto y volver a obtener el resultado en onActivityResult
desde este enlace .
Pero necesito múltiples contactos para ser seleccionados de la guía telefónica. ¿Cómo lograr esto?
No quiero hacer mi lista personalizada, ¿hay alguna forma de usar androides incorporados en la funcionalidad?
Parece que no hay tal manera "oficial". Su pregunta es básicamente la misma que esta. Cómo seleccionar múltiples contactos con el SDK de Android que tiene referencia a la implementación personalizada .
Si marca la aplicación Contactos de AOSP, no existe tal posibilidad ni en la documentación. Lo único que he observado de la fuente de Contactos de AOSP es la siguiente mención (en com.android.contacts.activities.PeopleActivity ):
// TODO fix or remove multipicker code
// else if (resultCode == RESULT_CANCELED && mMode == MODE_PICK_MULTIPLE_PHONES) {
Desde el código fuente de la aplicación MMS puede observar lo siguiente (en 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);
}
Field Intents.ACTION_GET_MULTIPLE_PHONES
está disponible en ContactsContract.java pero no pude encontrar ningún uso en AOSP. Entonces, creo que es un código muerto o que la acción se maneja en un código cerrado. He intentado de la misma manera iniciar la selección de contactos desde mi aplicación de prueba y solo obtuve una excepción sobre ninguna aplicación para manejar la acción.
Por supuesto, las aplicaciones de contactos de los proveedores proporcionan tales habilidades (por ejemplo, al seleccionar los destinatarios de los mensajes), pero es mejor no confiar en ellas.