Soy perfectamente capaz de agregar los contactos uno a uno con el siguiente código:Añadir varios contactos en lotes
ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();
ops.add(ContentProviderOperation.newInsert(RawContacts.CONTENT_URI)
.withValue(ContactsContract.RawContacts.ACCOUNT_TYPE, null)
.withValue(ContactsContract.RawContacts.ACCOUNT_NAME, null).build());
ops.add(ContentProviderOperation
.newInsert(Data.CONTENT_URI)
.withValueBackReference(Data.RAW_CONTACT_ID, 0)
.withValue(Data.MIMETYPE,
CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE)
.withValue(StructuredName.GIVEN_NAME, "Hello")
.withValue(StructuredName.FAMILY_NAME, "World").build());
try {
getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops);
} catch (RemoteException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (OperationApplicationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Sin embargo, cuando intento agregar alrededor de 500 contactos uno a uno - se tarda unos pocos minutos, lo que es demasiado tiempo para mi aplicación. ¿Hay alguna forma más rápida de agregar varios contactos?
Puede agregarlos en un subproceso, no en el subproceso UI. – Phil
Lo hago en un hilo separado, el problema es que la operación en sí toma demasiado tiempo. En iPhone, toma unos segundos para 500 contactos. – lstipakov
Lo hago de manera similar, pero hago los lotes cada vez que quiero agregar un contacto. No creo que sea la manera correcta, pero parece funcionar bien –