2015-05-30 3 views
7

Ich verwende einen Synchronisationsadapter in meinem Projekt, der regelmäßig synchronisiert wird. Um das Konto für den Sync-Adapter zu erstellen, verwende ich den folgenden Code.Stoppen Sie den Synchronisationsadapter, um ihn zu initialisieren, wenn Sie addPeriodicSync verwenden

Das Problem, mit dem ich konfrontiert bin, ist, dass dieser Code eine erste Synchronisierung auslöst. In der Dokumentation wurde nicht erwähnt, dass dieser Code die Synchronisierung zunächst ausführen wird.

In der Tat gibt es sogar im Google Sample-Projekt gibt es zusätzlichen Code zum Auslösen einer ersten Synchronisierung, die ich entfernt habe.

Ich habe den Code aus diesem Beispiel verwendet: http://developer.android.com/samples/BasicSyncAdapter/index.html

Auch wenn ich hinzufügen Befehl ContentResolver.cancelSync (Konto, null); Der Synchronisierungsadapter wird weiterhin ausgeführt.

Wie kann ich die Synchronisation des Synchronisationsadapters stoppen? Es sollte zum ersten Mal synchronisiert werden, wenn der Synchronisierungsintervall abgelaufen ist.

Account account = new Account(context.getPackageName(), context.getPackageName()); 

AccountManager accountManager = (AccountManager) context.getSystemService(Context.ACCOUNT_SERVICE); 

if (accountManager.addAccountExplicitly(account, null, null)) { 

     // Inform the system that this account supports sync 
     ContentResolver.setIsSyncable(account, context.getPackageName(), 1); 

     // Inform the system that this account is eligible for auto sync when the network is up 
     ContentResolver.setSyncAutomatically(account, context.getPackageName(), true); 

     // Recommend a schedule for automatic synchronization. 
     // The system may modify this based 
     // on other scheduled syncs and network utilization. 
     ContentResolver.addPeriodicSync(account, context.getPackageName(), 
       Bundle.EMPTY, AppConstants.SYNC_INTERVAL); 
} 

Antwort

0

Sie können das zukünftige Ereignis nach der ersten manuellen Synchronisierung planen.

0

Die erste Synchronisierung erfolgt aufgrund eines expliziten Hinzufügens eines Kontos.

Es wird eine Übertragung vom Sync Adapter gesendet, wenn ein Konto hinzugefügt/gelöscht wird, das die Synchronisierung auslöst. Bitte beziehen Sie sich auf die SyncManager-Quellklasse.

Es kann vermieden werden, indem Sie einen bestimmten Schlüssel in Bundle hinzufügen, der an onPerformSync() übergeben wird, und prüfen, ob derselbe die Synchronisierung auslöst, anstatt ein leeres Bündel zu senden.

Bundle bundle = new Bundle(); 
    bundle.putBoolean("MySync", true); 
    ContentResolver.addPeriodicSync(account, context.getPackageName(), 
      bundle, AppConstants.SYNC_INTERVAL); 
    .... 


    onPerformSync(...) { 
     if(bundle.containsKey("MySync")) { 
     //perform your sync 
     } 
    } 
Verwandte Themen