Cómo actualizar sólo los contactos en lugar de agregar en el adaptador de sincronización

Tengo pocos números almacenados en mi base de datos de aplicaciones. Quería coincidir con esos números en la aplicación de contactos y actualizar ese contacto con mimetype. Básicamente cómo Whatsapp hace. Sincronizan todos los contactos y su icono de aplicación entra en contacto.

He hecho la parte de la sinc. Y si agrego el nuevo contacto entonces puedo demostrar mi icono de la aplicación en el contacto. Pero mi requisito es actualizar el contacto existente.

Esto es lo que he intentado actualizar el contacto,

ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>(); ops.add(ContentProviderOperation.newInsert(addCallerIsSyncAdapterParameter(Data.CONTENT_URI, true)) .withValueBackReference(Data.RAW_CONTACT_ID,id) .withValue(Data.MIMETYPE, MIMETYPE) .withValue(Data.DATA1, "Username") .withValue(Data.DATA2, "Ite's Me") .build()); try { context.getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops); } catch (Exception e) { e.printStackTrace(); } 

y rawContactid estoy buscando de

 Cursor cursor = context.getContentResolver().query(Data.CONTENT_URI, new String[] {Data.RAW_CONTACT_ID, Data.DISPLAY_NAME, Data.MIMETYPE, Data.CONTACT_ID }, ContactsContract.CommonDataKinds.Phone.NUMBER + "= ?", new String[] {phonenumb}, null); 

No puedo agregar conexiones a ese contacto. Qué estoy haciendo mal. Puede alguien ayudarme con esto.

Gracias por adelantado.

2 Solutions collect form web for “Cómo actualizar sólo los contactos en lugar de agregar en el adaptador de sincronización”

El problema es que está utilizando withValueBackReference para hacer referencia al ID de contacto sin procesar. Esto intentará obtener el id del contacto raw usando su parámetro como un índice de una operación anterior en el lote, es decir, si id = 0, se referirá de nuevo a la primera operación, y si se tratara de un inserto de una nueva raw contacto, utilice el id generado como ID de contacto sin procesar para el inserto de los datos de contacto. Desea usar withValue aquí, ya que ya tiene el ID de contacto sin withValue .

inserta tus datos de persona en un nuevo contacto raw, y luego fusiona con raw_contact._id existente en tu lista de cotacts usando agregationexception.

 ArrayList<ContentProviderOperation> operations = new ArrayList<ContentProviderOperation>(); ContentProviderOperation.Builder builder = ContentProviderOperation.newUpdate(ContactsContract.AggregationExceptions.CONTENT_URI); builder.withValue(ContactsContract.AggregationExceptions.TYPE, ContactsContract.AggregationExceptions.TYPE_KEEP_TOGETHER); builder.withValue(ContactsContract.AggregationExceptions.RAW_CONTACT_ID1, raw1); builder.withValue(ContactsContract.AggregationExceptions.RAW_CONTACT_ID2, raw2); ops.add(builder.build()); 
FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.