android账户和同步数据,Android开发(38) 账户中心和同步适配器

概述

在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 syncContacts(

Account account, String authtoken, long serverSyncState,

List 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);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值