2012-06-30 6 views
5

In meinen AccountAuthenticatorActivity Ich versuche Setup Sync-Optionen für ein Konto nach addAccountExplicitly mit folgenden Zeilen:Konto Synchronisierung jede Minute

ContentResolver.setIsSyncable(account, authority, 1); 
ContentResolver.setSyncAutomatically(account, authority, true); 
int seconds = getResources().getInteger(R.integer.syncFrequencySeconds); 
ContentResolver.addPeriodicSync(account, authority, new Bundle(), seconds); 

syncFrequencySeconds wird auf 86400 (alle 24 Stunden). Aber mein Sync-Adapter wird immer noch jede Minute ausgelöst. Was mache ich falsch? (Sync selbst funktioniert ohne Probleme)

Antwort

3

Ich habe es selbst gelöst: der Sync-Adapter wiederholt sich, wenn die SyncResult.stats nicht mit den ContentResolver-Operationen übereinstimmen. Wenn sie übereinstimmen, wird die Synchronisierung wie erwartet ausgelöst.

Update: ein anderes Problem war, dass ich ContentResolver.notifyUpdate während der Synchronisation aufgerufen habe. entfernt, und es war in Ordnung.

+0

Wie haben Sie SyncResult.stats mit den Contact ContentResolver des SyncAdapters abgeglichen? – Nifhel

+1

Versteh nicht, was du mit Kontakten meinst. Sie müssen nur zählen zählen. Zum Beispiel haben Sie einen Eintrag als 'SyncResult.stats.numInserted ++' eingefügt. – oleh

+0

Danke, ich hatte dein Problem, aber aus einem anderen Grund. Die Ursache meines Problems war, dass ich die falsche Autorität benutzte, nachdem ich die richtige eingestellt hatte (com.android.contacts), hat alles funktioniert. :) – Nifhel

1

Meine SyncAdapter lief jede Minute, nicht unter Berücksichtigung der pollFrequency Intervall. Ich habe nur Abfragen verwendet, um lokale Daten an einen Remote-Server zu senden (unter SyncAdapter). Ich habe keine lokalen Daten auf dem SyncAdapter aktualisiert.

Aber meine lokalen Daten wurden in sehr kurzen Intervallen (Empfang von Daten von einem BLE-Gerät) mit einem anderen Dienst aktualisiert.

Um dieses Problem zu lösen, musste ich alle Anrufe notifyChange auf meinem Datenprovider ändern, um den zusätzlichen Parameter syncToNetwork: false (überprüfen Sie notifyChange Dokumentation).

//getContext().getContentResolver().notifyChange(uri, null); 
getContext().getContentResolver().notifyChange(uri, null, false); 

Diese Änderung hat keinen Einfluss auf meinem CursorAdapter im Activity verwendet, um die Daten zu zeigen, sobald ich die Tabellen aktualisieren.

syncResult.stats zugewiesen richtige Werte nicht mein Problem gelöst.

Verwandte Themen