andrdoi示例项目SampleSyncAdapter分析
概述
在sdk目录下有个示例项目SampleSyncAdapter,演示了 用户授权和同步适配器的一些内容,是个学习的很好范例。我读了很久,很多地方没搞明白,先把理解的一些记录下来。
通过学习该示例,你可以做到:
- 自定义的账户,让你的账户出现在 安卓系统设置的“账户”分组下。我看了下,像googel,华为,微信,支付宝都在这里出现。
- 定义同步的适配器。这里我还没搞明白,似乎需要自定义contentProvider,到底什么时候会触发同步(同步频率控制),如何手动触发,等等,我还没搞懂
下面是我理解的代码里的一些class的作用:
authenticator包
AuthenticationService 继承自Service,认证服务
拿Authenticator作为成员,在onBind时返回mAuthenticator.getIBinder()
Authenticator 继承AbstractAccountAuthenticator 验证器
public Bundle addAccount(AccountAuthenticatorResponse response, String accountType,String authTokenType,
String[] requiredFeatures, Bundle options)
添加账户。返回一个intent,this intent 用于启动 登录页。
public Bundle getAuthToken(AccountAuthenticatorResponse response,
Account account,String authTokenType, Bundle loginOptions)
获得 authToken。先从账户管理器里取密码,
如果能得到密码,则将账户密码使用NetworkUtilities.authenticate以获得authToken
如果未得到,则将用户名和账户类型发送到 登录页,以再次认证。
AuthenticatorActivity ,继承自 AccountAuthenticatorActivity
登录页,显示用户名和密码输入框,等待用户输入。点击登录按钮后触发handleLogin事件,
在这里先验证用户输入非空,启动UserLoginTask。
在doInBackground中调用NetworkUtilities.authenticate获得authToken,
完成后保存用户名和密码。
client包
NetworkUtilities:
public static String authenticate(String username, String password)
发送用户名和密码到服务端,收到 authToken字符串 public static List<RawContact> syncContacts(
Account account, String authtoken, long serverSyncState,
List<RawContact> dirtyContacts)
发送 用户名和authToken,serverSyncState, 和一个 联系人集合到服务端,
收到一个联系人集合 public static byte[] downloadAvatar(final String avatarUrl)
通过一个URL,获得用户头像的 字节集合
RawContact:
联系人信息的实体bean
notifier包
NotifierService: 通知服务,Service to handle view notifications.
This allows the sample sync adapter to update the information
when the contact is being looked at syncadapter syncadapter包
SyncAdapter:同步服务,继承自AbstractThreadedSyncAdapter
public void onPerformSync(Account account, Bundle extras,
String authority,ContentProviderClient provider, SyncResult syncResult)
处理同步,获得同步标记,获得需要同步的联系人,更新联系人,保存同步标记 SyncService:继承自Service
拿SyncAdapter作为成员,在onBind时返回 sSyncAdapter.getSyncAdapterBinder()
Constants 常量,声明 账户类型ACCOUNT_TYPE,授权标记类型AUTHTOKEN_TYPE
****************************************************************************************
AccountManager的常用方法
为指定账户设定密码
mAccountManager.setPassword(account, mPassword);
添加账户到 账户中心
final Account account = new Account(mUsername, Constants.ACCOUNT_TYPE);
mAccountManager.addAccountExplicitly(account, mPassword, null);
获得authToken
final String authtoken = mAccountManager.blockingGetAuthToken(account,
Constants.AUTHTOKEN_TYPE, NOTIFY_AUTH_FAILURE);
获得用户数据
String markerString = mAccountManager.getUserData(account, SYNC_MARKER_KEY);
参考:
http://yarin.blog.51cto.com/1130898/479032/
http://www.cnblogs.com/fengzhblog/p/3177002.html
http://blog.csdn.net/wutianyin222/article/details/7911858
http://mobile.51cto.com/aprogram-392392.htm
http://mobile.51cto.com/aprogram-392388.htm
andrdoi示例项目SampleSyncAdapter分析的更多相关文章
- BookStore示例项目---菜单栏UI分析
部署 参照 ABP示例项目BookStore搭建部署 项目解构 1).动态脚本代理 启动项目时,默认会调用两个接口 /Abp/ApplicationConfigurationScript /Abp/S ...
- [Asp.net 5] DependencyInjection项目代码分析4-微软的实现(4)
这个系列已经写了6篇,链接地址如下: [Asp.net 5] DependencyInjection项目代码分析 [Asp.net 5] DependencyInjection项目代码分析2-Auto ...
- 转:Android官方MVP架构示例项目解析
转自: http://www.infoq.com/cn/articles/android-official-mvp-architecture-sample-project-analysis 作者 吕英 ...
- Google官方MVP模式示例项目解析 todo-mvp
转载请注明出处:http://www.cnblogs.com/cnwutianhao/p/6700668.html 引言:在Google没有给出一套权威的架构实现之前,很多App项目在架构方面都有或多 ...
- Aes加密/解密示例项目
#AesEncrypt:Aes加密/解密示例项目 <br> 附件中的“AesEncrypt.zip”是本项目的exe文件,可直接下载下来运行和查看. *高级加密标准(英语:Advanced ...
- [Asp.net 5] DependencyInjection项目代码分析-目录
微软DI文章系列如下所示: [Asp.net 5] DependencyInjection项目代码分析 [Asp.net 5] DependencyInjection项目代码分析2-Autofac [ ...
- [Asp.net 5] DependencyInjection项目代码分析4-微软的实现(5)(IEnumerable<>补充)
Asp.net 5的依赖注入注入系列可以参考链接: [Asp.net 5] DependencyInjection项目代码分析-目录 我们在之前讲微软的实现时,对于OpenIEnumerableSer ...
- 我的ORM之示例项目
我的ORM索引 示例项目 code.taobao.org/svn/MyMvcApp/ 1. 编译 MyTool ,DbEnt, WebApp, 安装JRE. 2. 配置 Web.config 数据库字 ...
- [Asp.net 5] DependencyInjection项目代码分析4-微软的实现(2)
在 DependencyInjection项目代码分析4-微软的实现(1)中介绍了“ServiceTable”.“ServiceEntry”.“IGenericService”.“IService”. ...
随机推荐
- YMP运行初始化步骤
, Version.VersionType.Release); private static final Log _LOG = LogFactory.getLog(YMP.class); privat ...
- 找不到dubbo:annotaion错误
dubbo 2.8.4 出现找不到dubbo:annotation的错误,其实这个不会影响程序正确的运行,但是看到有红叉心里肯定非常不爽: 解决办法是,将dubbo-2.8.4.jar包,后缀改成.z ...
- 2012版辅助开发工具包(ADT)新功能特性介绍及安装使用
原文链接:http://android.eoe.cn/topic/android_sdk 2012年的Android辅助设备开发工具包(ADK)是Android开放设备协议(AOA)设备的最新参考实现 ...
- Android:UI 沉浸式体验,适合第一屏的引导图片、预览图片。
链接:http://www.cnblogs.com/liushilin/p/5799381.html
- Subclipse和TortoiseSVN版本不一致导致升到高版本的project后,低版本svn客户端无法使用。
- ISE中的Force Process Up-to-Date功能:ISE中如何在未综合实现的前提下打开ChipScope ?
ISE中如何在未综合实现的前提下双击Analyze Design Using ChipScope打开ChipScope ? 有时,你正在ISE中调试程序,在ChipScope中看到了现象,顺手修改了程 ...
- C#中计算时间差
问题: startTime = DateTime.Now; -----------slExecutedTime.Text = (DateTime.Now - startTime) ...
- linux关闭selinux和firewall
sed -i '/SELINUX/s/enforcing/disabled/' /etc/selinux/config setenforce 0
- regularization
https://www.zhihu.com/question/20924039 http://52opencourse.com/133/coursera%E5%85%AC%E5%BC%80%E8%AF ...
- python(40):利用utf-8编码判断中文英文字符
#!/usr/bin/env Python # -*- coding:GBK -*- """汉字处理的工具: 判断unicode是否是汉字,数字,英文,或者其他字符. 全 ...