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

  • 该帐户在设置
  • 中可见
  • 我在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秒左右执行一次同步。一切都通过 stub 支持类耗尽了主要 Activity :SyncAdapter,StubProvider等。同步适配器唯一要做的就是将一条消息记录到logcat中,该消息已运行。

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

    希望这个对你有帮助。

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

    09-10 05:44
    查看更多