5

Ho pochi numeri memorizzati nel mio database di app. Volevo abbinare quei numeri nell'app Contatti e aggiornare quel contatto con il mimetype. In pratica come funziona Whatsapp. Sincronizzano tutti i contatti e l'icona della loro app entra in contatto.Come aggiornare solo i contatti aggiungendo invece nell'adattatore di sincronizzazione

Ho eseguito la sincronizzazione e se aggiungo un nuovo contatto, sono in grado di mostrare l'icona della mia app nel contatto. Ma il mio requisito è semplicemente aggiornare il contatto esistente.

Questo è quello che ho cercato di aggiornare il contatto,

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(); 
     } 

e rawContactid sto recupero da

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); 

io non sono in grado di aggiungere le connessioni in quel contatto. Che cosa sto facendo di sbagliato. Qualcuno può aiutarmi per favore con questo.

Grazie in anticipo.

+0

Puoi condividere il codice con cui hai aggiunto la connessione della tua app in contatto. Lo sto cercando da 2 settimane. Grazie –

risposta

0

Il problema è che si sta utilizzando withValueBackReference per fare riferimento all'ID di contatto non elaborato. Questo cercherà di ottenere l'id del contatto non elaborato utilizzando il parametro come indice di un'operazione precedente nel batch, ovvero se id = 0, farà riferimento alla prima operazione e se si trattasse di un inserimento di un nuovo raw contatto, utilizzare l'id generato come id di contatto non elaborato per l'inserimento dei dati di contatto. Si desidera utilizzare withValue qui, dal momento che si dispone già dell'ID di contatto non elaborato.

0

inserire i dati personali in nuovo raw_contact, quindi unirli a raw_contact._id esistente nell'elenco di cotti utilizzando 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());