android AccountManager and SyncManager

http://blog.csdn.net/wutianyin222/article/details/7911858

1、應用通過在androidmanifest,xml中聲明一個帶有Intent:android.accounts.AccountAuthenticator的services來向AccountManager註冊一個賬戶類型。同時,類似widget的聲明方式,在meta-data中要聲明一個xml,在這個xml中描述賬戶的類型,圖標,顯示名,等等

通過以上幾步就可以在設置->賬戶與同步中添加一個賬戶類型了

帶有Intent:android.accounts.AccountAuthenticator的services需要繼承Services類(廢話),關鍵的一步是onBind回調中返回一個IAccountAuthenticator的IBinder,這個不需要應用層關心,只需要創建一個繼承AbstractAccountAuthenticator的類,AbstractAccountAuthenticator已經將IAccountAuthenticator的實現好了(搭了一個框架,通過抽象方法回調子類方法)。

AbstractAccountAuthenticator的子類只需將AbstractAccountAuthenticator的幾個抽象方法實現好了,就實現了一個賬戶的添加了。

其中最重要的方法 addAccount一個方法要求返回一個Bundle

一般的,這個Bundle中都會有個包含登錄界面的Activity的Intent,然後通過這個Bundle返回給AccountManager,來啓動一個登錄界面添加賬戶。

2、應用通過在androidmanifest,xml中聲明一個帶有Intent:android.content.SyncAdapter的Service來達到向系統註冊一個具有同步功能的賬戶適配器(sync-adapter). 同時,類似widget的聲明方式,在meta-data中要聲明一個xml,在這個xml中描述適配器綁定的賬戶,所要同步的區域(Authority)(如com.android.contactscom.android.calendar com.android.email)等信息,一個適配器只能同步一個Authority,若想使一個賬戶同步多個Authority,可以向系統註冊多個綁定同一賬戶的sync-adapter。

類似AccountAuthenticator的實現方式,SyncAdapter的Service在onBind中需要返回ISyncAdapter的IBinder,可以通過繼承AbstractThreadedSyncAdapter來返回該IBinder,通過實現父類的抽象方法onPerformSync來實現同步功能。

3、如何調用添加賬戶接口;

1、直接通過AccountManager添加,AccountManager.getInstance().addcount,在該接口中傳入,賬戶等信息,系統就會調用那個賬戶的登錄界面。

2、有時可能想調用所有可以同步該應用的賬戶接口(如日曆可以使用Exchange賬戶和Google賬戶),或者特定的一組賬戶,這時可以傳入Intent: Settings.ACTION_ADD_ACCOUNT or android.settings.ADD_ACCOUNT_SETTINGS,這個Intent會調用系統Settings的AddAccount的Activity。如果沒有其他參數,那麼這個activity和從設置->賬戶與同步進入的activity沒有區別。如果使用putExtra添加額外的參數的話,那麼就可以啓動一組特定的賬戶了,具體如下:

Extra: (“authorities”,String[])指定一組authority 用字符串數組傳入

Extra:(“account_types”,String[])指定一組賬戶類型,用字符串數組傳入

關於更多AccountAuthenticator和SyncAdapter用法,參考google example:SampleSyncAdapter.


發佈了104 篇原創文章 · 獲贊 152 · 訪問量 101萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章