3

我正在开发一个以用户定义的频率同步所选帐户的 android 应用程序。

AccountManager manager = (AccountManager) getSystemService(ACCOUNT_SERVICE);
Account[] list = manager.getAccounts();
Pattern emailPattern = Patterns.EMAIL_ADDRESS;
for(i=0;i<AcntCount;i++)
    for (Account account : list) 
        if (emailPattern.matcher(account.name).matches())  
            if(account.name.matches(syncSettings.getString("Account"+i.toString(), null)))
                //ContentResolver.addPeriodicSync(account, authority, extras, pollFrequency)

应该在. authority_ 我必须为此编写一个同步适配器吗?extrasaddPeriodicSync()

4

1 回答 1

0

是的。您必须编写一个 SyncAdapter。addPeriodicSync() 专门用于告诉 ContentResolver 使 SyncAdapter 在计时器上触发。

你需要什么权限?好吧,SyncAdapters 在(帐户,权限)对上工作。

该帐户指定了特定的登录名——例如,如果您有多个 gmail 地址,则可能有多个。

权威机构会告诉你数据的类型——例如,使用 gmail 帐户,你可能正在同步……邮件、联系人、日历、财务等……所以这会告诉你数据的类型和绑定的服务帐户。

这对一起提供给 SyncAdapter -- 更具体地说,您在系统上有一堆同步适配器(它们定义了可用于同步的权限),并且在 PeriodicSync 触发时查找正确的同步适配器。

因此,如果您正在编写与您自己的自定义服务器同步的自己的应用程序,您将编写一个知道如何读取和存储您的架构的 SyncAdapter,并且您将定义一个权限。这些只是一个字符串,通常采用 java-classpath 样式。--“com.example.SyncAdapterSample”

阅读为什么 ContentResolver.requestSync 不触发同步?对于获得工作 SyncAdapter 所需的所有步骤。这绝对是你想走的路。设置它的步骤很多,但是一旦框架在那里,它会让你的生活变得更加轻松。

现在 - 额外。这些只是如何完成定期同步的一些选项。首先,您应该对默认设置没问题。然后深入研究文档。例如,额外的 SYNC_EXTRAS_EXPEDITED 表示这是一个高优先级的更新,应该立即同步——通常,调度程序会等待一两分钟,以便它可以批量请求(并节省电池,因为所有的无线电都没有时间,但仅限于集中爆发)。通常,在您的 SyncAdapter 变得比简单的基线复杂得多之前,您无需担心额外的问题。

于 2014-02-25T14:32:05.603 回答