android账号管理在手机设置的其他账户中可以找到,打开后,发现这里有许多有趣的功能,比如微信的同步通讯录、天翼云账户的一键跳转修改账户密码等,接下来,我们来讲讲他的实现思路
实验原理
- 效果图
- 几个重要类描述:
- 重要方法、数据格式、服务端要求:
- 可同步的功能
一、可同步多个功能
SyncAdapter继承自AbstractThreadedSyncAdapter,SyncAdapter同样需要一个服务(Service)和一个同步适配器(AbstractThreadedSyncAdapter)。SyncAdapter的Service 需要在AndroidManifest里面声明一个带有Intent:android.content.SyncAdapter的Service来达到向系统注册一个具有同步功能的账户适配器(sync-adapter)。 同时,类似widget的声明方式,在meta-data中要声明一个xml,在这个xml中描述适配器绑定的账户,所要同步的区域(Authority)(如com.android.contacts,com.android.calendar com.android.email)等信息,一个适配器只能同步一个Authority,若想使一个账户同步多个Authority,可以向系统注册多个绑定同一账户的sync-adapter它可以协助管理和自动发起数据传输,也可以协调不同应用的同步操作。
二、可同步功能
可以实现的功能有点多,email、calendar、contacts…所有跟服务端的同步服务
实验步骤讲解
Account验证
1)首先是class Authenticator extends AbstractAccountAuthenticator ,如图,该类是账号验证类
其中addAccount方法用来定义需要增加账号时的操作,如调用AuthenticatorActivity来进行账号的添加认证。
可以使用冒号来定义对齐方式:
(Authenticator.java)
2)在AuthenticatorActivity.java中定义了handleLogin(),点击添加按钮后,handleLogin()将ui中的用户名和密码取得,试图通过网络取服务端认证。如图所示。
(AuthenticatorActivity.java)
3)NetworkUtilities.java中的public static boolean authenticate(String username,String password)方法展示了通过网络验证的具体流程。
得到服务端结果后,在sendResult()中通过handle.post调用来实现onAuthenticationResult()在AuthenticationActivity中的运行。onAuthenticationResult()判断验证通过则结束AuthentcationActivity,否则报错并请求重新验证。如图所示。
(NetworkUtilities.java)
同步功能
4)Account的验证完毕后,就生成了账号,可以开始使用同步功能了。同步的主要逻辑在public class SyncAdapter extends AbstractThreadedSyncAdapter中实现。
(以同步通讯录为例)onPerformSync中的执行流程中,使用NetworkUtilities.syncContacts将本地通讯录更新至服务端,并获得服务端的修改。如图所示
(SyncAdapter)
Account和SyncAdapter及其Service和xml定义之间的关系
参考
1)http://blog.youkuaiyun.com/inconsolabl/article/details/48054341
2)http://www.oschina.net/question/54100_38786
3)http://blog.youkuaiyun.com/robertcpp/article/details/51353296
源码
自行搜索SampleSyncAdapter,github一堆