我顺带把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

更多相关文章

  1. 开始搞个android定位demo(1)
  2. Android版本适配:9.0 Pie(API级别28)
  3. Android腾讯微薄客户端开发六:给用户加VIP认证以及美化微博显示
  4. Unity3d获取persistentDataPath返回空的解决方案
  5. Retrofit的详解及使用
  6. Android为ListView的Item设置不同的布局
  7. Android(安卓)9.0 http请求问题
  8. android Activity 之 startActivityForResult 的使用
  9. HttpClient and HttpURLConnection——Android(一)

随机推荐

  1. Android资源文件混淆
  2. Android的项目不能直接引用可移植类库的
  3. 一个方便集成的 Android(安卓)右滑返回上
  4. android实现截屏操作
  5. 【经验】android webview 后退键导致表单
  6. android蓝牙(二)——接收数据
  7. APK反破解技术小结-转自ZhWeir
  8. Badge分析&如何逼死处女座
  9. Android动态模糊效果的快速实现方法
  10. Android(安卓)如何定义全局变量 以及 sta