博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
android开发(39) 使用android系统的账户中心管理账
阅读量:5742 次
发布时间:2019-06-18

本文共 1821 字,大约阅读时间需要 6 分钟。

在android的系统设置页,有个“账户”分组,里面有很多的账户,很多app都使用了这个账户系统,比如“谷歌”,“淘宝”,“微信”,“华为”等。这些都是大公司呢,有没有可能我们也使用这个,让我们的软件的名称也出现在这里呢,答应是肯定的。看看效果图:

   

 

加上这个,我们的app立马就高大上了,如何做到呢?

实现步骤

1. 继承 AbstractAccountAuthenticator 实现 一个 自己的 账户认证器

2. 继承自 service,实现一个服务,该服务使用上一步的 账户认证器

3. 继承 AccountAuthenticatorActivity ,实现 自定义的 登录页面。

 

知识准备

你需要了解 上面积个类的知识,和accountManager,我翻译了这几个类的概述,参考我前几篇文章。

 

分析

如果被系统发现?

自定义的服务代码如下:

    

我们看到,这个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

 

转载于:https://www.cnblogs.com/vir56k/p/4026559.html

你可能感兴趣的文章
【SDN】Openflow协议中对LLDP算法的理解--如何判断非OF区域的存在
查看>>
纯DIV+CSS简单实现Tab选项卡左右切换效果
查看>>
栈(一)
查看>>
LINUX档案权限
查看>>
数据结构及算法基础--优先队列(Priority Queue)
查看>>
C#使用Timer.Interval指定时间间隔与指定时间执行事件
查看>>
最浅显易懂的数据库索引讲解
查看>>
tcp/ip基础知识
查看>>
Apache许可翻译
查看>>
你必须非常努力,才能看起来毫不费力[转载]
查看>>
js遍历集合
查看>>
树链剖分——树形到线性的转化
查看>>
老赵 MSDN Webcast ASP.NET MVC框架开发系列课程
查看>>
姑娘你大胆地往前走——答大二学生XCL之八问
查看>>
UVA196
查看>>
ios 自定义delegate(一)
查看>>
创建美国地区的appleId
查看>>
例题10-2 UVa12169 Disgruntled Judge(拓展欧几里德)
查看>>
[c语言]c语言中的内存分配[转]
查看>>
JS 原生ajax写法
查看>>