onPerformSync 来执行手动同步被称为 我可以通过调-6ren">
gpt4 book ai didi

android - SyncAdapter : Account created, requestSync OK,但 setSyncAutomatically 不工作

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:12:32 25 4
gpt4 key购买 nike

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

  • 该帐户在设置中可见
  • 我在我的 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!!!
}
}

所以,一切看起来都正确无误。

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

知道我做错了什么或忘记了什么吗?

最佳答案

重写

我在 GitHub 上整理了一个示例项目,演示了一个有效的 SyncAdapter。该项目是here .

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

在 API 17 上,此演示将每 30 秒左右进行一次同步。一切都在主要 Activity 中用完了 stub 支持类:SyncAdapter、StubProvider 等。同步适配器唯一要做的就是将它已运行的消息记录到 logcat。

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

我希望你觉得这很有用。

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

关于android - SyncAdapter : Account created, requestSync OK,但 setSyncAutomatically 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44116195/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com