Android AccountManager 账户同步管理简单介绍
Android AccountManager 账户同步管理简单介绍
文章目录
- Android AccountManager 账户同步管理简单介绍
- 前言
- AccountManager 简介
- 如何让自己的应用显示在可同步账号列表中
- 1、创建一个自定义的AuthenticationService类
- 2、创建Authentication令牌属性的xml/xml文件
- 3、创建一个自定义的 Authenticator 类
- 其他
前言
Android 界面–》设置Settings–》账号–》添加账号,发现里面没有可以同步的应用列表,咋回事?
百度了一波,刚开始看有点晕,后面多看一点基本理解了。
先揭晓答案,是下面这里代码,返回的authTypes数组长度为0;
AccountManager am = AccountManager.get(Context);
AuthenticatorDescription[] authTypes = am.getAuthenticatorTypes();
为啥返回0 ,或者如何让他不返回0 ,后面介绍。
可以看下面两个文章是介绍AccountManager相关知识的:
https://blog.csdn.net/dzkdxyx/article/details/78569867
https://blog.csdn.net/dzkdxyx/article/details/78632945
AccountManager 简介
AccountManager帐号管理器,集中管理apps注册的不同类型的帐号。
不同类型的帐号服务会使用不同的帐号登录和鉴权方式,所以AccountManager为不同类型的帐号提供一个插件式authenticator模块,
authenticators自己处理帐号登录/认证的具体细节,也可以自己存储帐号信息
Authenti…啥?
授权令牌 (Authentication Token, auth-token ) – 是由服务器提供的一个临时的访问令牌。
所有需要识别用户的请求,在发送到服务器时都要带着这个令牌。
我们使用 OAuth2 ,它也是现在最为流行的方法。
如何让自己的应用显示在可同步账号列表中
网上的简单介绍:https://www.cnblogs.com/mfmdaoyou/p/6844097.html
1、创建一个自定义的AuthenticationService类
public class MyAuthenticationService extends Service {MyAuthenticator mAuthenticator;@Overridepublic void onCreate() {LogUtil.debug("");mAuthenticator = new MyAuthenticator(this);}@Overridepublic IBinder onBind(Intent intent) {LogUtil.debug("getBinder()... returning the AccountAuthenticator binder for intent " + intent);LogUtil.debug("mAuthenticator = " + mAuthenticator);return mAuthenticator.getIBinder();}
}
一定记得要在AndroidManifest.xml注册
<serviceandroid:name=".MyAuthenticationService"android:exported="true"><intent-filter><actionandroid:name="android.accounts.AccountAuthenticator" /></intent-filter><meta-dataandroid:name="android.accounts.AccountAuthenticator"android:resource="@xml/authenticator" /></service>
2、创建Authentication令牌属性的xml/xml文件
authenticator.xml
<account-authenticator xmlns:android="http://schemas.android.com/apk/res/android"android:accountType="com.example.android.samplesync"android:icon="@drawable/icon"android:smallIcon="@drawable/icon"android:label="@string/label"
/>
上面这个信息是其他应用可以获取到的令牌信息。
3、创建一个自定义的 Authenticator 类
MyAuthenticator 是一个继承自AbstractAccountAuthenticator的类。
public class MyAuthenticator extends AbstractAccountAuthenticator {public MyAuthenticator(Context context) {super(context);}@Overridepublic Bundle editProperties(AccountAuthenticatorResponse r, String s) {return null;}@Overridepublic Bundle addAccount(AccountAuthenticatorResponse r, String s, String s2, String[] strings,Bundle bundle) throws NetworkErrorException {final Bundle result = new Bundle();result.putString(AccountManager.KEY_ACCOUNT_NAME, "Test Account");result.putString(AccountManager.KEY_ACCOUNT_TYPE, s);LogUtil.debug("");return result;}...
}
这个是系统获取对应应用获取令牌信息返回的数据,具体不分析了。
还有相关的Activity和相关方法就不做一一介绍了。
流程理解和回调关系可以看下这篇:
https://blog.csdn.net/wy3243996/article/details/52411139
其他
AccountManager 没有做深入使用,这里不做详细介绍。
Account 管理都是需要app自身登录的前提的,系统点击"Add Account",
选择对应应用后,实际是跳转到应用的登录界面。
在Android9.0发现火狐firefox应用是在"Add Account"列表中的,
但是Android11.0 的"Add Account"列表中没看到火狐应用,咋回事?
研究发现是Android11版本 的新firefox没有做账户管理。
那么如何查看apk中做了账户管理:
方式(1)使用工具解压apk,查看AndroidManifest.xml文件
方式(2)把apk拖拽到Android Studio中查看AndroidManifest.xml文件
搜索:“Authentica”,
查看是否存在如下Servie
<serviceandroid:name=".AuthenticationService"android:exported="true"><intent-filter><actionandroid:name="android.accounts.AccountAuthenticator" /></intent-filter><meta-dataandroid:name="android.accounts.AccountAuthenticator"android:resource="@xml/authenticator" /></service>
如果看到了就说明,该应用时支持账号同步功能的,如果没有就是未做适配支持。
Android AccountManager 账户同步管理简单介绍相关推荐
- Android AccountManager帐号管理(二)
Android AccountManager 帐号管理(一)分享了如何将自己的帐号体系注册到系统服务AccountManagerService,统一由AccountManager来管理,这仅是自己的一 ...
- java同步机制简单介绍
在java编程里经常听到类似的术语: 这个函数是不是同步的... 本文就简单介绍下什么是同步, java中同步的一些处理方法. 1.同步问题产生的原因 Java中同步问题是伴随这多线程而产生的, 也就 ...
- Android中PackageManager类的简单介绍
1.PackageManager这个类,表层意思是包管理者,既然可以管理包,那么包下的一些东西便可以获取,其中可以获取应用图标和应用名称以及包名. 通过下面一行代码实例化PackageManager类 ...
- Android AccountManager帐号管理(一)
AccountManager简介 AccountManager帐号管理器,集中管理apps注册的不同类型的帐号. 不同类型的帐号服务会使用不同的帐号登录和鉴权方式,所以AccountManager为不 ...
- Android 手机重力感应实现简单介绍
手机重力感应实现简单介绍 现在有很多游戏是通过摇晃手机实现的,比如赛车游戏 摇骰子游戏 迷宫游戏 等等 . 今天我用简单的代码为大家介绍一下android 下重力感应的实现方式 ...
- Win7下共享文件(以及凭据管理简单介绍)
总结了一下win7下设置共享文件和权限的方法: 一.设置共享文件准备工作: 在控制面板中打开网络和共享中心-->更改高级和共享设置: 在家庭网络和工作网络中选择好:启用网络发现,启用文件和打印机 ...
- Android数据存储SP的简单介绍
介绍 数据保存分类(目前主流):SP.SQLite.Room 1 SP:sharedPreference首选项 很小,简单的数据可以保存在SP window 的.ini文件,android 的.xml ...
- linux100day(day7)--用户管理和权限管理简单介绍
系统基础 计算机的三大部件 CPU 内存 IO 总线 一般使用system call和api来调用硬件 一些基础命令, pwd 查看当前路径cal 计算器clock 时钟hwclock 显示与设置硬件 ...
- Android学习之四大组件简单介绍
组件是可以调用的基本功能模块.Android的应用程序就是由组件组成的,Android系统中有四个重要的组件,分别是Activity(活动).Service(服务).BroadcaseReceiver ...
最新文章
- 波士顿动力双足机器人Atlas放出逆天体操表演,网友:比我还强
- Android--SensorEventListener和AudioManager实现根据条件转换手机震动和响铃
- Python爬取Json格式数据并读写(改中文编码)
- CxImage图像处理类库说明3(转载)
- linux如何编译wine,利用winelib编译一个可在linux下运行的程序
- 【机器学习】无监督学习--(聚类)K-Means
- oracle影响性能,影响Oracle性能的几个重要参数
- onItemLongClick+onCreateContextMenu实现长按ListItem弹出不同菜单
- 堆插入和删除的简单实现
- 网游设想二:九重天[]
- C# winform 如何让TextBox文本内容垂直居中?
- 邮箱容量多大?163邮箱发邮件无限容量解读
- stata图像绘制专题【计量经济系列(二)】
- yolo极大抑制_Pytorch从0开始实现YOLO V3指南 part4——置信度阈值和非极大值抑制...
- 谷歌浏览器崩溃!亲测有效
- 使用Java校验【统一社会信用代码】真假
- 递归实现树状分级部门树《部门单表》
- 实现SSO单点登录的思考
- 基于struts2的留言板系统简单实现jdbc分页
- 安装搜狗输入法无法切到搜狗