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”. ...
随机推荐
- mac 安装配置java环境变量
1.下载java 地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 2.选择 ...
- 如何分析Java程序中的死锁
使用下面方式:产生java的Thread Dump信息 windows平台上:ctrl+break 或者 ctrl+(fn+b)键 Linux平台上:kill -3 pid (查找程序进程id -&g ...
- Storm工作流程
为什么storm的数据来自于消息队列? Storm的解决问题的scope主要在于流计算,说流计算之前我们先简单的说下一般数据处理系统的过程.一般数据处理简单说要有几个环节:数据采集,数据计算,结果输出 ...
- SSO单点登录的发展由来以及实现原理
单点登录以及权限,在很早之前都有写过,不过都比较简单,今天就具体说一下,以及下一步要做的 1.web单系统应用 早期我们开发web应用都是所有的包放在一起打成一个war包放入tomcat容器来运行的, ...
- java 字符串格式化
转:http://blog.sina.com.cn/s/blog_af26e3330101988v.html 1.对整数进行格式化:%[index$][标识][最小宽度]转换方式 我们可以看到,格式化 ...
- 解决code::blocks 17.12不能debug的方法
错误提示: You need to specify a debugger program in the debuggers's settings. 解决方法: 在settings->debugg ...
- Pycrypto与RSA密码技术笔记
密码与通信 密码技术是一门历史悠久的技术.信息传播离不开加密与解密.密码技术的用途主要源于两个方面,加密/解密和签名/验签 在信息传播中,通常有发送者,接受者和窃听者三个角色.假设发送者Master想 ...
- (原创)发布一个C++版本的ORM库SmartDB(一)
先简单说说ORM的优点: 提高开发效率,减少重复劳动,只和业务实体打交道,由业务实体自动生成sql语句,不用手写sql语句. 简单易用, 可维护性好. 隔离数据源,使得我们更换数据源时不用修改代码. ...
- iOS按钮的基本使用代码优化
将图片按钮进行连线, 声明方法同时连接六个按钮 -(void)move:(UIButton *)btn{ // NSLog(@"看见一个美女"); //头尾式动画 //0.开 ...
- Swiper.js的腾讯新闻演示
演示效果地址:https://www.swiper.com.cn/demo/indexsample/: 代码: <!DOCTYPE html> <html> <head& ...