我顺带把AbstractAccountAuthenticator 也翻译了,感觉直接看SampleSyncAdapter例子很难快速明白整体的意图,配合api是个好的方式,感叹android的api这是太详细了。
AbstractAccountAuthenticator 概述
AbstractAccountAuthenticator 概述
这是一个抽象的基类,用于创建账户管理器(AccountAuthenticators)。为了成为一 个 认证器,一个类必须继承该类,提供抽象方法的实现,并且写一个服务(service),
在被ACTION_AUTHENTICATOR_INTENT作为action的intent调用时,在该服务的 onBind
(android.content.Intent) 方法实现中,直接返回getIBinder() 的返回值结果。在
AndroidManifest.xml 文件中,这个服务必须指定下面的 intent过滤器(intent filter )和元数据标记。
<intent-filter>
<action android:name="android.accounts.AccountAuthenticator" />
</intent-filter>
<meta-data android:name="android.accounts.AccountAuthenticator"
android:resource="@xml/authenticator" />
译者注:ACTION_AUTHENTICATOR_INTENT其实是个常量,等于字符串
android.accounts.AccountAuthenticator,其实就是和上面这个intent filter的过
滤器action相同。
上面的xml描述中,android:resource 属性必须指向一个资源文件,像下面这样:
<account-authenticator
xmlns:android="http://schemas.android.com/apk/res/android"
android:accountType="typeOfAuthenticator"
android:icon="@drawable/icon"
android:smallIcon="@drawable/miniIcon"
android:label="@string/label"
android:accountPreferences="@xml/account_preferences"
/>
使用你自己的资源替换 icon 和 label 属性指向的值。android:accountType 属性必须是个字符串,它唯一标识了你的 认证器,并且和 用户使用AccountManager 调用时
指定的字符串相同,同时 和你的账户类型(account type)一致。 android:icon的一个使用者是在 “账户和同步”设置页,android:smallIcon的一个使用者是在 联系人
应用程序的标签面板。
android:accountPreferences属性指向一个 首选项屏幕设置的xml配置文件
(PreferenceScreen xml ),它包含了一个PreferenceScreen 的列表,可以层级嵌套。
它可以被调用以管理认证器。示例如下:
<PreferenceScreen
xmlns:android="http://schemas.android.com/apk/res/android">
<PreferenceCategory android:title="@string/title_fmt" />
<PreferenceScreen
android:key="key1"
android:title="@string/key1_action"
android:summary="@string/key1_summary">
<intent
android:action="key1.ACTION"
android:targetPackage="key1.package"
android:targetClass="key1.class" />
</PreferenceScreen>
</PreferenceScreen>
一些抽象方法的标准实现模式,像下面这样:
- * 如果为 认证器 提供的参数是足够的,到达了完全的满意,这时将会这样做(will do so )并且返回一个包含了结果的Bundle。
- * 如果 认证器 需要 从用户那里收集信息才能达到满意,这时,将创建一个intent打开
“提示用户信息的activity”,并且完成该请求。这个intent必须返回一个包含了 指定key名称为 KEY_INTENT 的 Bundle.当完成的时候,这个activity需要返回final修饰的结果。这个intent应该使用key指示 KEY_ACCOUNT_MANAGER_RESPONSE来包含AccountAuthenticatorResponse。这个activity在结束时必须调用 onResult(Bundle) 或者 onError(int, String) 。
- 如果认证器不能同步处理请求,并且返回一个结果。那么当完成请求时,它可以选择返
回null和使用 AccountManagerResponse 去发送结果。
后续的关于 每个抽象认证器方法 的描述,将不描述 可能的异步原生请求处理,而将描述输入参数和期望结果来替代。
当写一个activity去满足那些请求,一种方式,必须在activity关闭时(或者任何其他情况下activity的作者认为是一个正确的时间去响应时),通过
AccountManagerResponse 并且通过响应返回结果。AccountAuthenticatorActivity
用于处理这些,那么当写activity去处理这些请求时,某人可以希望去继承(extend)
它。
-----
张云飞vir 写于 2014-10-15