2012-07-24 39 views
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) 

哪些是應當到位的authorityextrasaddPeriodicSync()給出的值。 我必須爲此編寫同步適配器嗎?

+1

權限將是您想要同步的內容提供者的權限,因爲聯繫人將是「com.android.contacts」。 extras'Bundle'用於傳遞您需要爲特定同步適配器/同步操作指定的任何參數 - 參考ContentResolver中名爲'SYNC_EXTRA_xxx'的常量以獲取有關這些參數的提示。 – Jens 2012-07-24 08:44:25

+0

謝謝Jens。要同步日曆和聯繫人,我應該編寫單獨的'addPeriodicSync()'? – JiTHiN 2012-07-24 09:23:12

+0

是的,就我所知,沒有什麼「全能」權威可以傳遞。但是,您應該檢查是否同步適配器配置爲通過調用'ContentResolve#getIsSyncable(..) – Jens 2012-07-25 06:43:25

回答

0

是的。你必須編寫一個SyncAdapter。 addPeriodicSync()專門用於告訴ContentResolver使SyncAdapter在定時器上觸發。

你需要什麼權威?那麼,SyncAdapters就可以在一個(賬戶,授權)對上工作。

該帳戶指定了特定的登錄名 - 例如,如果您有多個gmail地址,則可能有多個帳戶。

管理局告訴數據類型 - 例如,使用gmail acocunt,您可能正在同步...郵件,聯繫人,日曆,財務等...所以這告訴您類型的數據類型以及綁定到帳戶的服務。

兩人一起提供給SyncAdapter - 更具體地說,你有一堆syncAdapters的系統(他們定義可用來同步當局),以及正確的syncadapter中查找PeriodicSync火災時。

因此,如果你編寫自己的應用程序,同步對自己的自定義服務器,你會寫一個知道如何讀取和存儲您的架構,你會定義一個權威SyncAdapter。這些只是一個字符串,通常以java-classpath風格。 - 「com.example.SyncAdapterSample」

閱讀Why does ContentResolver.requestSync not trigger a sync?獲取工作SyncAdapter所需的所有步驟。這絕對是你想要的方式。有很多步驟來建立它,但是一旦框架在那裏,它會讓你的生活變得更容易。

現在 - 附加功能。這些只是的一些選項,如何定期同步將完成。你應該工作正常的默認值,在第一。然後深入到The documents。例如,額外的SYNC_EXTRAS_EXPEDITED表明這是一個高優先級的更新,應該馬上同步 - 通常,調度程序會等待一兩分鐘,以便它可以批量請求(並節省電池,因爲沒有收音機時間,但只能集中爆發)。一般來說,在SyncAdapter變得比簡單基線複雜得多之前,您不需要擔心額外的問題。