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

参考:

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

时间: 2025-01-04 00:16:08

andrdoi示例项目SampleSyncAdapter分析的相关文章

Google官方MVP模式示例项目解析 todo-mvp

转载请注明出处:http://www.cnblogs.com/cnwutianhao/p/6700668.html 引言:在Google没有给出一套权威的架构实现之前,很多App项目在架构方面都有或多或少的问题.第一种常见问题是没有架构,需求中的一个页面对应项目中的一个activity或一个fragment,所有的界面响应代码.业务逻辑代码.数据请求代码等等都集中在其中.第二种常见的问题是架构实现的不断变化,不断在各种架构间摇摆,一直找不到一个适合自己的架构. Google官方示例项目地址 ht

[Asp.net 5] DependencyInjection项目代码分析4-微软的实现(4)

这个系列已经写了6篇,链接地址如下: [Asp.net 5] DependencyInjection项目代码分析 [Asp.net 5] DependencyInjection项目代码分析2-Autofac [Asp.net 5] DependencyInjection项目代码分析3-Ninject [Asp.net 5] DependencyInjection项目代码分析4-微软的实现(1) [Asp.net 5] DependencyInjection项目代码分析4-微软的实现(2) [As

Android官方MVP架构示例项目解析

前段时间Google在Github推出了一个项目,专门展示Android引用各种各样的MVP架构,算是官方教程了.趁着还新鲜,让我们来抛砖引玉一探究竟,看看在Google眼里什么样算是好的MVP架构. App架构在Android开发者中一直是讨论比较多的一个话题,目前讨论较多的有MVP.MVVM.Clean这三种.google官方对于架构的态度一直是非常开放的,让开发者自主选择组织和架构app的方式,期望能留给开发者更多的灵活性. 由于没有一套权威的架构实现,现在很多App项目中在架构方面都有或

【Asp.net入门3-01】使用jQuery-创建示例项目

过去,浏览器除了显示HTML外,很少具有其他功能.因此,早期的Web应用程序需要依赖服务 器端代码来响应用户交互并执行数据操作.Web应用程序的交互依赖HTML表单元素和浏览器向服务 器发送数据的功能实现. 随着Web浏览器技术的不断发展,Web应用程序领域也发生了巨变.现代浏览器复杂而且功能强 大,提供了各种用于客户端JavaScript编程的API.如今,纯粹由服务器端代码构成的Web应用程序已 经很少见了,因此,客户端技术对于创建优秀的Web应用程序至关重要. 最常用的浏览器API为DOM

团队项目方案分析

团队项目方案分析 一.前言 对于我所在的项目团队而言:我们团队在经过讨论与分析之后确定了项目的一个大致方向.那么我们为什么会选择这样的一个方案呢?这将会是我们今天讨论的一个主要的话题, 在文章接下来的内容当中,笔者将以问题的形式来讲述整个方案以及我们团队对于这个项目的一些想法. 二.领域前瞻 首先,对于我们目前的项目经历以及项目能力,我们应该有一个合理的预期,这样我们最终所交付的产品才会与我们当下的能力有一个较好的化学反应.那么对于我们该从什么领域入手呢?在此我们团队做了一个比较理性的思考.对于

开源项目成熟度分析工具-利用github api获取代码库的信息

1.github api github api是http形式的api,功能还是比较丰富的,博主因为项目的原因主要用到的是提取project信息这项功能,返回的数据是JSON格式. api页:https://developer.github.com/v3/ Options: (H) means HTTP/HTTPS only, (F) means FTP only --anyauth Pick "any" authentication method (H) -a, --append Ap

我的ORM之示例项目

我的ORM索引 示例项目 code.taobao.org/svn/MyMvcApp/ 1. 编译 MyTool ,DbEnt, WebApp, 安装JRE. 2. 配置Web.config 数据库字符串 3. 映射一个R盘(批处理会用到,运行 MyMvcApp\ErpCar\Res\R.bat ) 4. 执行 MyMvcApp\ErpCar\Res\Build_Res.bat 5. 建数据库 执行 MyMvcApp\db\合成数据库脚本.bat ,并执行 MyMvcApp\db\生成本地数据库.

[Asp.net 5] DependencyInjection项目代码分析4-微软的实现(3)

这个系列已经写了5篇,链接地址如下: [Asp.net 5] DependencyInjection项目代码分析 [Asp.net 5] DependencyInjection项目代码分析2-Autofac [Asp.net 5] DependencyInjection项目代码分析3-Ninject [Asp.net 5] DependencyInjection项目代码分析4-微软的实现(1) [Asp.net 5] DependencyInjection项目代码分析4-微软的实现(2) 如果想

Android开源项目pulltorefresh分析与简单使用

在Android开发中有时我们需要访问网络实时刷新数据,比如QQ好友在线状态最新信息,QQ空间需要显示更多的好友动态信息,EOE论坛客户端显示更多的文章帖子信息等.android-pulltorefresh开源项目提供一个向下滑动即刷新列表的功能,将该项目稍作修改即可应用到自己的项目中. 1.下载地址 https://github.com/johannilsson/android-pulltorefresh 该项目为 Android 应用提供一个向下滑动即刷新列表的功能. 2.工程组成 Pull