我刚刚为我的应用创建了一个帐户。
被称为
我还遵循了从这里开始的所有步骤: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!!!
}
}
因此,一切看起来都正确无误。
但是很遗憾,我无法获得定期同步!当我打开设置,帐户时,我看到该帐户,并且日期和时间是我通过代码或手动执行同步的时间。
关于我做错了什么,或者我忘记了什么的任何想法?
最佳答案
重写
我在GitHub上放了一个示例项目,演示了一个有效的SyncAdapter。该项目为here。
我只在具有API 17的仿真器上尝试过此操作,因为我不想等待大约一个小时左右(现在可能更长)来进行同步。我建议您也选择这条路线。
在API 17上,此演示将每30秒左右执行一次同步。一切都通过 stub 支持类耗尽了主要 Activity :SyncAdapter,StubProvider等。同步适配器唯一要做的就是将一条消息记录到logcat中,该消息已运行。
除了可能,设置同步的调用顺序不正确之外,我看不到您的代码有任何问题。查看演示中的调用顺序,以了解有效的示例。
希望这个对你有帮助。
(我是在Android Studio 3.0 Canary 5上执行此操作的。我希望这不是问题。)