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”. ...
随机推荐
- How to convert String to Date – Java
In this tutorial, we will show you how to convert a String to java.util.Date. Many Java beginners ar ...
- Mongodb 安装(Windows)
- 转 Kubernetes 入门 概念理解
你闺女也能看懂的插画版Kubernetes指南 原创 2016-06-30 作者 周小璐 译 编者按:Matt Butcher是Deis的平台架构师,热爱哲学,咖啡和精雕细琢的代码.有一天女儿走进书 ...
- ARM:移动GPU往PC GPU效能迈进
行动装置的热潮持续不退,各大手机制造商除了想尽办法推出外型酷炫的行动装置设备来吸引消费者的目光之外,更在行动应用处理器玩起多核心的「核」战争,无非是希望能够带给消费者更优异的效能新体验.然而,随着消费 ...
- python3 如何给装饰器传递参数
[引子] 之前写过一篇文章用来讲解装饰器(https://www.cnblogs.com/JiangLe/p/9309330.html) .那篇文章的定位是入门级的 所以也就没有讲过多的高级主题,决定 ...
- Vue(二):调试神器vue-devtools安装和使用
前言 vue-devtools是一款基于chrome游览器的插件,用于调试vue应用,这可以极大地提高我们的调试效率.接下来我们就介绍一下vue-devtools的安装. 安装 1.chrome商店直 ...
- centos安装Elasticsearch步骤
1.安装JDK:centos删除openJDK,安装JDK,vim /etc/profile配置JAVA_HOME 2.官网下载elasticsearch:https://www.elastic.co ...
- bestcoder 48# wyh2000 and a string problem (水题)
wyh2000 and a string problem Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/65536 K ...
- javascript原生代码取单选框的值
网上搜索到的,项目中正好用到,先记下来,以后直接从自己的博客上复制粘贴!!! //取单选框选择中的值,传入单选框的name function getRadioBoxValue(radioName) { ...
- VS2015 调试中断点突然失效的解决办法、VS调试时关闭调试让浏览器继续保留页面
VS2010 调试中断点突然失效的解决办法 问题描述:在调试前加了断点,但debug时红色的断点变成透明的圆圈加一个感叹号,执行到该处时也不会停止. 这个问题遇到过几次了,前几次都没怎么注意,有时候是 ...