SyncAdapter wird nicht bei "Netzwerk Tickle" aufgerufen

9

Übersicht

Ich habe Googles Tutorial zur Verwendung von SyncAdapter ohne Verwendung von ContentProvider, Authenticator usw. gefolgt . Es funktioniert perfekt, wenn ich onPerformSync(...) anrufe, wenn ich über de SyncAdapter einen "Upload" zum Server machen muss.

Nun, wie Sie sich vorstellen können, muss ich auch Downloads vom Server machen (ja, ich verstehe, dass es besser wäre, das Cloud-Messaing-System von Google zu verwenden, aber das ist die Einrichtung, die ich bekommen habe, und ich kann ' t das ändern). Anstatt periodische Synchronisationen zu nutzen, möchte ich den "Netzwerk-Tickle" nutzen, den das Android-System durchführt, wenn ein Netzwerk zur Verfügung steht. Dafür gebe ich Folgendes an:

%Vor%

Aber mein SyncAdapter wird gerade nicht genannt. Wenn Sie sich andere stackOverFlow-Fragen ansehen, scheint es ein Problem zu geben, wenn Sie mit SyncAdapter auf API 10 oder darunter abzielen und dass Sie ein Konto explizit vor hinzufügen müssen, um die before-Methoden aufzurufen. Also endete ich damit:

%Vor%

Nun wird dieser Code ausgeführt, wenn sich der Benutzer anmeldet oder wenn die Anwendung beendet wurde und erneut gestartet wird. Ich frage mich, sollte ich setIsSyncable und setSyncAutomatically nur aufrufen, wenn ich das Dummy-Konto das erste Mal hinzufüge?

Ein Teil der "Goodiness" des SyncAdapters ist auch, dass er im Fall einer Ausnahme weiter telefoniert. Aber ich verstehe nicht ganz, wie das geht, also habe ich das:

%Vor%

Wie Sie sehen können, schalte ich je nach dem Ergebnis meines Uploads auf den Server eine periodische Synchronisierung ein oder aus.

    
Chayemor 24.03.2014, 23:01
quelle

2 Antworten

0

Da die accountManager.getAccounts [] jedes Konto auf dem Gerät zurückgibt, denke ich, dass nichts garantiert, dass das Konto [0] das Konto Ihrer App ist (aka, hat den ACCOUNT_TYPE Ihres Paketnamens). - Sie könnten addAccountExplicitly () in jedem Fall aufrufen, wenn es existiert, dann passiert nichts.

%Vor%     
Tin Tran 18.09.2015 10:09
quelle
0

Haftungsausschluss: Ich könnte mich irren.

Wenn Sie alles erledigt haben, müssen Sie auch ContentResolver.requestSync () aus Ihrer App heraus, wenn Sie eine Synchronisierung ausführen müssen. Die Synchronisierung wird jedoch nicht sofort ausgeführt, da Android versucht, Netzwerkaktivitäten zu clustern.

Sie können auch die Google Cloud Messaging-API verwenden, um eine Synchronisierung anzufordern, aber ich weiß nicht viel darüber.

    
Konstantin Schubert 15.04.2016 11:08
quelle

Tags und Links