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.

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()); 
  • Cómo obtener todos los contactos nombre, apellido, correo electrónico, número de teléfono, etc, sin duplicados
  • Editar nombre / número de teléfono de contacto programáticamente
  • Obtener el perfil de usuario / propietario de contacto URI y la imagen de usuario con API 8 en adelante
  • Insertar contacto en Android con ContactsContract
  • Visualización de contactos sólo con números de teléfono utilizando la intención ACTION_PICK en el dispositivo Android
  • Insertar contactos Apellido utilizando Intent android
  • Leer todos los datos de contacto
  • ¿Cómo puedo cargar una foto de contacto?
  • No se puede insertar los contactos de android mediante programación en el dispositivo de Android
  • ContentObserver para actualización de contacto manualmente
  • ¿Por qué se censuran algunos contactos de las aplicaciones de Android?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.