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.
- Recuperar número de teléfono de contacto de URI en Android
- ¿Cuál es el tipo / nombre de cuenta predeterminado para contactos en la aplicación de contacto de Android?
- ¿Cómo funcionan las columnas unidas implícitas con los datos de los contactos de Android?
- Obtener contactos de Android con funcionalidad de tipo a filtro, restringida a una cuenta específica
- Cargando la imagen de contacto a través de LOOKUP_KEY y método de conveniencia openContactPhotoInputStream
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.
- Android editar contacto
- Android: obtener todos los contactos de la libreta de direcciones local
- Android Contacts.CONTENT_STREQUENT_URI lanza SQLiteException en Android 4.1.2 y 4.4.2
- ¿Cómo obtener el ID de Facebook de un usuario a través de la API de ContactsContracts?
- Android API 8, 10 ContactsContract.Data.HAS_PHONE_NUMBER ninguna columna
- Crear grupo de contactos invisibles en Android
- Android 3.0 - Cómo recuperar todos los contactos a través de ContactsContract
- ¿Cuál es la diferencia entre los contactos y los contactos crudos?
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());