5

Ich habe nur wenige Nummern in meiner Apps-Datenbank gespeichert. Ich wollte diese Nummern in der Kontakte-App zuordnen und diesen Kontakt mit Mimetype aktualisieren. Grundsätzlich wie Whatsapp funktioniert. Sie synchronisieren alle Kontakte und ihr App-Icon kommt in Kontakt.So aktualisieren Sie nur die Kontakte und fügen stattdessen den Synchronisierungsadapter hinzu

Ich habe Synchronisierungsteil gemacht und wenn ich neuen Kontakt hinzufüge, dann kann ich mein App-Symbol im Kontakt zeigen. Aber meine Anforderung ist, nur den vorhandenen Kontakt zu aktualisieren.

Das ist, was ich den Kontakt von

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

und rawContactid ich bin holen

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

zu aktualisieren versucht haben, bin ich nicht in der Lage Verbindungen in diesen Kontakt hinzuzufügen. Was mache ich falsch. Kann mir bitte jemand dabei helfen?

Vielen Dank im Voraus.

+0

Können Sie bitte den Code teilen, mit dem Sie Verbindung Ihrer App in Kontakt hinzugefügt haben. Ich suche seit 2 Wochen danach. Vielen Dank –

Antwort

0

Das Problem ist, dass Sie withValueBackReference verwenden, um die unverarbeitete Kontakt-ID zu referenzieren. Dies wird versuchen, die ID des rohen Kontakts zu erhalten, indem Sie Ihren Parameter als Index für eine vorherige Operation im Stapel verwenden, dh wenn id = 0, wird auf die erste Operation zurückgegriffen, und wenn es sich um eine Einfügung eines neuen Raw handelt Kontakt, verwenden Sie die generierte ID als rohe Kontakt-ID für die Einfügung der Kontaktdaten. Sie möchten hier withValue verwenden, da Sie bereits die rohe Kontakt-ID haben.

0

Fügen Sie Ihre Personendaten in new raw_contact ein und fusionieren Sie sie dann mit der vorhandenen raw_contact._id in Ihrer Kontaktliste mit aggregationexception.

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()); 
Verwandte Themen