2011-04-18 64 views
5

我有一个具有多个帐户和SyncAdapter的应用程序。我希望在用户选择不同的帐户时立即停止同步帐户。我在做:停止Android SyncAdapter同步

ContentResolver.cancelSync(new Account(mAccount, ACCOUNT_TYPE), MyProvider.AUTHORITY); 
ContentResolver.removePeriodicSync(new Account(mAccount, ACCOUNT_TYPE), MyProvider.AUTHORITY, new Bundle()); 

它仍然同步。我怎样才能阻止它同步?

ps我启用同步通过setSyncAutomatically,requestSync最初。

+1

只是为了澄清,你的原始解决方案不工作的原因是因为你使用'setSyncAutomatically'。但是,如果您使用'addPeriodicSync(帐户帐户,字符串权限,捆绑额外付款,长轮询频率)启用了同步“,那么您的原始解决方案就可以工作。 – JosephL 2011-12-02 02:45:59

回答

8

我想通了。

我们已经使用:

int syncOnOff = 0; 

ContentResolver.setIsSyncable(account, MyProvider.AUTHORITY, syncOnOff); 

其中syncOnOff为0,禁用,> 0启用。 | O |为什么不是真的假?

+3

这并不明确停止正在运行的同步过程,它只是说会有我没有进一步的同步实际运行同步完成 – Nickolaus 2012-11-23 14:48:55

+1

你救了我以后的日子! @Nickolaus:然后你将它与'ContentResolver.cancelSync(新账户(mAccount,ACCOUNT_TYPE),MyProvider.Authorority);' – Roel 2015-05-19 11:36:40

7

正确的答案应该是:取消同步

使用cancelSync

根据this website解释:

我们不得不取消同步请求的选项,通过调用cancelSync()。 如果同步适配器处于“挂起”状态,这意味着它尚未启动 ,它将立即取消并成为“空闲”。如果已经运行 ,则会调用同步适配器上的onSyncCanceled()方法 。例如,您可以使用它来设置onPerformSync()将定期检查并响应的“isSyncStopped”标志 。