android开发(39) 使用android系统的账户中心管理账
2014-10-15 16:00
405 查看
在android的系统设置页,有个“账户”分组,里面有很多的账户,很多app都使用了这个账户系统,比如“谷歌”,“淘宝”,“微信”,“华为”等。这些都是大公司呢,有没有可能我们也使用这个,让我们的软件的名称也出现在这里呢,答应是肯定的。看看效果图:
加上这个,我们的app立马就高大上了,如何做到呢?
2. 继承自 service,实现一个服务,该服务使用上一步的 账户认证器
3. 继承 AccountAuthenticatorActivity ,实现 自定义的 登录页面。
自定义的服务代码如下:
我们看到,这个service 指定了过滤器为 android.accounts.AccountAuthenticator,这是个系统调用的 action。
自定义 认证器 做了什么?
我们需要在定义认证器里实现 它的 addAccount 和 getAuthToken 方法。
addAccount方法: 在api里解释说,在 添加账户时,需要从用户收集认证信息(账户名和密码),需要返回一个intent,以打开一个activity,这个activity就是我们登陆页了。我们需要在登录页里处理登录的逻辑实现,并使用AccountManager记录下 登录成功的用户信息,并保存在账户中心。
getAuthToken方法: 获得auth Token ,这是一个授权标记,有些地方翻译为“令牌”,就是从服务端返回的字符串,指示了登录成功。很多系统不在本地(手机)保存真实的密码,配合auth token 来显示一次登录认证,后续的操作请求都携带auth token作为身份令牌。
加上这个,我们的app立马就高大上了,如何做到呢?
实现步骤
1. 继承 AbstractAccountAuthenticator 实现 一个 自己的 账户认证器2. 继承自 service,实现一个服务,该服务使用上一步的 账户认证器
3. 继承 AccountAuthenticatorActivity ,实现 自定义的 登录页面。
知识准备
你需要了解 上面积个类的知识,和accountManager,我翻译了这几个类的概述,参考我前几篇文章。分析
如果被系统发现?自定义的服务代码如下:
<service android:name=".MyAuthenticatorService" android:exported="true" > <intent-filter> <action android:name="android.accounts.AccountAuthenticator" /> </intent-filter> <meta-data android:name="android.accounts.AccountAuthenticator" android:resource="@xml/authenticator" /> </service>
我们看到,这个service 指定了过滤器为 android.accounts.AccountAuthenticator,这是个系统调用的 action。
自定义 认证器 做了什么?
我们需要在定义认证器里实现 它的 addAccount 和 getAuthToken 方法。
addAccount方法: 在api里解释说,在 添加账户时,需要从用户收集认证信息(账户名和密码),需要返回一个intent,以打开一个activity,这个activity就是我们登陆页了。我们需要在登录页里处理登录的逻辑实现,并使用AccountManager记录下 登录成功的用户信息,并保存在账户中心。
getAuthToken方法: 获得auth Token ,这是一个授权标记,有些地方翻译为“令牌”,就是从服务端返回的字符串,指示了登录成功。很多系统不在本地(手机)保存真实的密码,配合auth token 来显示一次登录认证,后续的操作请求都携带auth token作为身份令牌。
@Override public Bundle addAccount(AccountAuthenticatorResponse response, String accountType, String authTokenType, String[] requiredFeatures, Bundle options) throws NetworkErrorException { // 需要实现 Log.v(TAG, "addAccount()"); final Intent intent = new Intent(mContext, LoginActivity.class); intent.putExtra(AccountManager.KEY_ACCOUNT_AUTHENTICATOR_RESPONSE, response); final Bundle bundle = new Bundle(); bundle.putParcelable(AccountManager.KEY_INTENT, intent); return bundle; } @Override public Bundle getAuthToken(AccountAuthenticatorResponse response, Account account, String authTokenType, Bundle options) throws NetworkErrorException { // 需要实现 return null; }
具体实现代码
可以到我的云盘下载: http://yunpan.cn/cAIvcxDHZjrIS 访问密码 d8f7相关文章推荐
- android开发(39) 使用android系统的账户中心管理账
- Android新浪微博开发(一)OAnth认证及账户管理、sdk的使用
- Android开发之获取系统管理权限,即DevicePolicyManager和DeviceAdminReceiver的使用
- 使用 XForms 和 Ruby on Rails 开发小型门诊管理系统,第 1 部分: 安装配置 IBM DB2 9 pureXML
- 使用 XForms 和 Ruby on Rails 开发小型门诊管理系统,第 3 部分:实现护士和医生 XForm
- 如何使用系统管理员帐户管理多个开发人员?
- 一步一步使用Ext JS MVC与Asp.Net MVC 3开发简单的CMS后台管理系统之预告篇
- Android开发之windows系统上NDK的安装与使用
- 最近预计使用C#.NET开发一个财产管理系统
- 浅谈Android系统开发中LOG的使用
- 使用Eclispe进行Android系统应用的开发和调试 推荐
- 浅谈Android系统开发中LOG的使用
- 一步一步使用Ext JS MVC与Asp.Net MVC 3开发简单的CMS后台管理系统之预告篇
- 使用Adobe's AIR 2.5开发Android程序
- Android--入门---3---(Android 系统的使用&开发前的设置)
- 如何让您的新系统使用已存在的认证中心的账户
- 使用 XForms 和 Ruby on Rails 开发小型门诊管理系统,第 3 部分:实现护士和医生 Xform
- Android特色开发之账户管理
- AgileEAS.NET开发平台系统管理使用教程
- 一步一步使用Ext JS MVC与Asp.Net MVC 3开发简单的CMS后台管理系统之预告篇