SyncAdapter:帐户创build,requestSync确定,但setSyncAutomatically不工作

我刚刚为我的应用程序创build了一个帐户

  • 该帐户在设置中可见
  • 我在我的XML中设置了syncable =“true”
  • 我可以通过按设置来执行手动同步 – > onPerformSync被调用
  • 我可以通过调用ContentResolver.requestSync来执行“代码”同步 – > onPerformSync被调用
  • 当然,是的,同步在设置中启用。 我不使用任何节电器。

我也遵循从这里的所有步骤: https : //stackoverflow.com/a/5255360/327402

这是我的代码来获得代码的同步

AccountManager am = AccountManager.get(this); Account[] accounts = am.getAccountsByType(ACCOUNT); //Log.e("DEBUG", "Accounts: " + accounts.length); if (accounts.length == 0) { Account account = new Account(getString(R.string.app_name), ACCOUNT); ContentResolver.setIsSyncable(account, AUTHORITY, 1); ContentResolver.addPeriodicSync(account, AUTHORITY, new Bundle(), 7200); ContentResolver.setSyncAutomatically(account, AUTHORITY, true); if (am.addAccountExplicitly(account, "pass1", null)) Log.i("DEBUG", "account Created: " + account.name + ", " + account.type); else Log.i("DEBUG", "addAccountExplicitly returned false"); } else{ ContentResolver.requestSync(accounts[0], AUTHORITY, new Bundle());// THIS IS WORKING!!! } } 

所以,一切都看起来正确和罚款。

但不幸的是,我无法获得定期同步! 当我打开设置,帐户,我看到的帐户和date和时间是我通过代码或手动执行同步的时间。

任何想法,我做错了什么,或者我忘了?

Solutions Collecting From Web of "SyncAdapter:帐户创build,requestSync确定,但setSyncAutomatically不工作"

改写

我已经在GitHub上放置了一个演示了SyncAdapter的示例项目。 该项目在这里 。

我只在API 17的模拟器上试过,因为我不想等待大约一个小时左右(现在可能更长),以便同步发生。 我build议你也采取这条路线。

在API 17上,这个演示将每隔30秒进行一次同步。 所有东西都用主存活的支持类来完成:SyncAdapter,StubProvider等等。同步适配器唯一做的就是将一条消息logging到它已经运行的logcat。

除了设置同步的调用顺序可能不正确之外,我并没有发现任何错误。 看看演示中的通话顺序,了解一下有效的例子。

希望这个对你有帮助。

(我在Android Studio 3.0 Canary 5上做了这个。我希望这不是问题。)

一个重要的事情要记住的是,周期性同步时间不能保证,可能不准确,这是在文档中提到:

尽pipe这些同步按照指定的频率进行安排,但是如果同步操作队列中的其他同步超前,则可能需要更长时间才能启动。 这意味着实际的开始时间可能会漂移。

我也会尝试使用AccountManager创build帐户,而不是通过创buildnew Account()

  manager.addAccountExplicitly(account, null, null) 

而最后一件事,如果这个账户刚刚创build,你可能想在设置自动同步设置之后立即强制执行第一次同步:

  if (accountJustCreated) { SyncAdapter.performSync(); }