Wenn ich einen Kontakt zu meinem Telefonbuch hinzufüge, wird die Methode onPerformSync() des Sync Adapters ausgelöst. Aber ich bin nicht in der Lage, herauszufinden, wie die neu hinzugefügten Kontaktdetails innerhalb dieser Methode abgerufen werden. Bitte helfen Sie mir mit einigen Anleitungen und Code-Schnipsel. Schätze deine Hilfe.Wie kann auf die neu hinzugefügte Methode Contact in Sync Adapter onPerformSync zugegriffen werden?
Wie kann auf die neu hinzugefügte Methode Contact in Sync Adapter onPerformSync zugegriffen werden?
Antwort
Die Kontakte Ihres Kontos sind in der Tabelle RawContacts
gespeichert. Die Daten (z. B. Telefonnummern, E-Mail-Adressen) sind in der Tabelle Data gespeichert (wobei RAW_CONTACT_ID
auf die Zeile _ID
dieses Kontakts in der Tabelle RawContacts
zeigt).
Um neue Kontakte zu erkennen, muss Ihr Sync-Adapter das Feld SOURCE_ID
in der Tabelle RawContacts
verwalten.
Die Dokumentation sagt über SOURCE_ID
(in den Spalten von Feldern an der Spitze):
String, der eindeutig diese Zeile zu seiner Quelle Konto identifiziert. In der Regel wird es zu dem Zeitpunkt gesetzt, an dem der rohe Kontakt eingefügt und danach nie geändert wird. Die einzige bemerkenswerte Ausnahme ist ein neuer Kontakt roh: es wird einen Kontonamen und -typ (und möglicherweise einen Datensatz) haben, aber keine Quell-ID. Dies zeigt dem Synchronisierungsadapter an, dass ein neuer Kontakt serverseitig erstellt werden muss und seine ID im entsprechenden SOURCE_ID-Feld des Telefons gespeichert werden muss.
Ihr Sync-Adapter sollte also nach Kontakten suchen, die zu Ihrem Kontotyp gehören und eine leere SOURCE_ID
haben. Nachdem der Kontakt synchronisiert wurde, muss er SOURCE_ID
auf einen (nicht leeren) Wert setzen, der den neuen Kontakt identifiziert.
Wenn Sie einen neuen Kontakt vom Server synchronisieren, müssen Sie die SOURCE_ID
beim Einfügen des neuen Kontakts auf Android festlegen. Wenn Sie dies nicht tun, führt dies zu Duplikaten (da der Kontakt bei der nächsten Synchronisierung als neuer Kontakt mit dem Server synchronisiert wird).
- 1. Wie kann auf die Datenbankklasseninstanz zugegriffen werden?
- 2. Wie kann auf die Aufrufeigenschaft zugegriffen werden?
- 3. onPerformSync() mehrmals aufgerufen
- 4. Neu hinzugefügte Spalte kann nicht einmal in pgAdmin aktualisiert werden
- 5. Kontakt-Sync-Adapter in Android
- 6. Generische Methode kann nicht zugegriffen werden
- 7. Neu hinzugefügte Elemente können nicht gezogen werden
- 8. Zugriff auf die neu hinzugefügte Ansicht von linearlayout Manager
- 9. Wie kann auf diese Daten zugegriffen werden?
- 10. Wie kann auf die Eigenschaft eines verschachtelten Objekts zugegriffen werden?
- 11. Wie kann auf den Diktatwert zugegriffen werden?
- 12. Kann auf eine Instanzvariable über eine statische Methode zugegriffen werden?
- 13. Android Sync Adapter funktioniert nicht
- 14. Kann auf die Symboltabelle in einem Makro zugegriffen werden?
- 15. Aktualisierte Kontakte in Android für Contact Sync abrufen
- 16. Wie kann auf die Ausgabe eines PowerShell-Skripts zugegriffen werden?
- 17. Wie kann auf die vorherige aktualisierte_at zugegriffen werden?
- 18. Wie kann auf die Picasa-Datenbank (Desktop) zugegriffen werden?
- 19. auf die cachedResponseForRequest-Methode wird nicht zugegriffen
- 20. ContentResolver.requestSync in Sync-Adapter funktioniert nicht in Android
- 21. Datagrid Setzen Sie den Fokus auf die neu hinzugefügte Zeile
- 22. Auf die Datenbank [dbName] kann nicht zugegriffen werden. (ObjectExplorer)
- 23. Wie kann man neu hinzugefügte Entitäten am besten zurückgeben?
- 24. Wie kann global auf das aktuelle HttpRequestMessage-Objekt zugegriffen werden?
- 25. Wie kann auf eine multidimensionale Hash-Sitzung zugegriffen werden?
- 26. Wie kann auf AWS RDS über CLI/PUTTY zugegriffen werden?
- 27. Kann programmgesteuert auf die von CoreBluetooth protokollierten Fehlercodes zugegriffen werden?
- 28. SharePoint-Eigenschaft, auf die im Code zugegriffen werden kann
- 29. kann nicht auf die hinzugefügte Servicereferenz zugreifen
- 30. Sync-Adapter-Dienst exportiert, aber ungeschützt
Vielen Dank für die klare Antwort, schätzen –
@Marten Abgesehen von Google Mail-Kontakten scheinen andere Kontotypen (z. B. Exchange) nicht immer der Regel zu folgen, dass [SOURCE_ID stabil ist] (https://developer.android. com/guide/topics/providers/contacts-provider.html # KontakteProviderMetadata). Haben Sie eine ähnliche Lösung gefunden oder gefunden? –
@ zafeiris.m Tut uns leid, wir haben keine Anwendungsfälle zum Lesen von 'SOURCE_ID' anderer Konten. Also sind wir diesem Problem nie begegnet. – Marten