获取系统中注册的帐号类型列表是一个典型的用例。比如,在系统设置界面中选择“添加帐户”,这是,系统显示一个所有支持的帐户类型的列表界面(ChooseAccountActivity)供用户点选。另外,在Contacts/Calendar等应用程序中,也会向系统请求创建帐户或者现实帐户列表。背后的操作是统一由Android Framework提供的。应用程序只要将设置好的intent发送出去即可。
在研究如何获取帐户类型列表之前,简要的描述一下,应用程序如何将一个帐号注册到系统中。这个注册过程包含一下的要素:
- 扩展AbstractAuthenticator类。实质上,这是IAuthenticator接口的一个实现。
- 创建一个Service,并且具备以下设定:
- 持有一个authenticator实例
- onBind()方法返回authenticator对应的IBinder
- 包含authenticator的XML描述文件
- Manifest中对应的Service声明中包含处理"android.accounts.AccountAuthenticator"的intent filter,以及指向authenticator描述文件的<meta-data>标记
那就从ChooseAccountActivity开始吧。
AuthenticatorDescription数组
类AuthenticatorDescription定义了对authenticator的一个描述,包括类型、标签、图标等等,可以对等于应用程序中创建的authenticator描述文件中声明的内容。事实上,后者就是用来初始化一个AuthenticatorDescription的。
ChooseAccountActivity类持有一个AuthenticatorDescription类型的数组成员mAuthDescs,并且负责将其填满,具体操作在updateAuthDescript