gpt4 book ai didi

android - 使用 addPeriodicSync 时停止同步适配器进行初始同步

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:01:35 28 4
gpt4 key购买 nike

我在我的项目中使用了一个同步适配器,它会定期同步。要为同步适配器创建帐户,我使用以下代码。

我面临的问题是这段代码触发了初始同步。该文档没有提到此代码将使同步最初运行。

事实上,即使在 google 示例项目中,也有用于触发初始同步的额外代码,我已将其删除。

我使用了这个示例中的代码: http://developer.android.com/samples/BasicSyncAdapter/index.html

即使我添加命令 ContentResolver.cancelSync(account, null);同步适配器仍在运行。

我怎样才能停止同步适配器最初的同步。它应该在同步间隔期过后第一次同步。

Account account = new Account(context.getPackageName(), context.getPackageName());

AccountManager accountManager = (AccountManager) context.getSystemService(Context.ACCOUNT_SERVICE);

if (accountManager.addAccountExplicitly(account, null, null)) {

// Inform the system that this account supports sync
ContentResolver.setIsSyncable(account, context.getPackageName(), 1);

// Inform the system that this account is eligible for auto sync when the network is up
ContentResolver.setSyncAutomatically(account, context.getPackageName(), true);

// Recommend a schedule for automatic synchronization.
// The system may modify this based
// on other scheduled syncs and network utilization.
ContentResolver.addPeriodicSync(account, context.getPackageName(),
Bundle.EMPTY, AppConstants.SYNC_INTERVAL);
}

最佳答案

初始同步是显式添加帐户的结果。

  if (accountManager.addAccountExplicitly(account, null, null))

每当添加/删除触发同步的帐户时,Sync Adapter 都会发送广播。请引用SyncManager源码类。

可以通过在传递给 onPerformSync() 的 Bundle 中添加特定键并检查是否触发同步而不是发送空包来避免这种情况。

    Bundle bundle = new Bundle();
bundle.putBoolean("MySync", true);
ContentResolver.addPeriodicSync(account, context.getPackageName(),
bundle, AppConstants.SYNC_INTERVAL);
....


onPerformSync(...) {
if(bundle.containsKey("MySync")) {
//perform your sync
}
}

关于android - 使用 addPeriodicSync 时停止同步适配器进行初始同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30549284/

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