SyncAdapter:已创建帐户,requestSync确定,但setSync自动无法正常工作

Waz*_*_Be 10 account android android-syncadapter

我刚为我的应用创建了一个帐户.

  • 该帐户在设置中可见
  • 我在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!!!
    }
}
Run Code Online (Sandbox Code Playgroud)

所以,一切看起来都很正确.

但不幸的是,我不能定期同步!当我打开设置,帐户时,我看到帐户,日期和时间是我通过代码或手动执行同步的时间.

我知道自己做错了什么,或者忘记了什么?

Che*_*amp 2

改写

我在 GitHub 上整理了一个示例项目,演示了一个有效的 SyncAdapter。项目就在这里

我只在具有 API 17 的模拟器上尝试过此操作,因为我不想等待大约一个小时左右(现在可能更长)才能进行同步。我建议你也走这条路。

在 API 17 上,此演示将每 30 秒左右进行一次同步。一切都在带有存根支持类的主活动中运行:SyncAdapter、StubProvider 等。同步适配器所做的唯一事情就是向 logcat 记录它已运行的消息。

除了设置同步的调用顺序可能不正确之外,我确实没有发现您的代码有任何问题。查看演示中的调用顺序,了解有效的示例。

希望这个对你有帮助。

(我在 Android Studio 3.0 Canary 5 上执行此操作。我希望这不是问题。)