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 账户同步管理简单介绍相关推荐

  1. Android AccountManager帐号管理(二)

    Android AccountManager 帐号管理(一)分享了如何将自己的帐号体系注册到系统服务AccountManagerService,统一由AccountManager来管理,这仅是自己的一 ...

  2. java同步机制简单介绍

    在java编程里经常听到类似的术语: 这个函数是不是同步的... 本文就简单介绍下什么是同步, java中同步的一些处理方法. 1.同步问题产生的原因 Java中同步问题是伴随这多线程而产生的, 也就 ...

  3. Android中PackageManager类的简单介绍

    1.PackageManager这个类,表层意思是包管理者,既然可以管理包,那么包下的一些东西便可以获取,其中可以获取应用图标和应用名称以及包名. 通过下面一行代码实例化PackageManager类 ...

  4. Android AccountManager帐号管理(一)

    AccountManager简介 AccountManager帐号管理器,集中管理apps注册的不同类型的帐号. 不同类型的帐号服务会使用不同的帐号登录和鉴权方式,所以AccountManager为不 ...

  5. Android 手机重力感应实现简单介绍

    手机重力感应实现简单介绍            现在有很多游戏是通过摇晃手机实现的,比如赛车游戏 摇骰子游戏 迷宫游戏 等等 . 今天我用简单的代码为大家介绍一下android 下重力感应的实现方式 ...

  6. Win7下共享文件(以及凭据管理简单介绍)

    总结了一下win7下设置共享文件和权限的方法: 一.设置共享文件准备工作: 在控制面板中打开网络和共享中心-->更改高级和共享设置: 在家庭网络和工作网络中选择好:启用网络发现,启用文件和打印机 ...

  7. Android数据存储SP的简单介绍

    介绍 数据保存分类(目前主流):SP.SQLite.Room 1 SP:sharedPreference首选项 很小,简单的数据可以保存在SP window 的.ini文件,android 的.xml ...

  8. linux100day(day7)--用户管理和权限管理简单介绍

    系统基础 计算机的三大部件 CPU 内存 IO 总线 一般使用system call和api来调用硬件 一些基础命令, pwd 查看当前路径cal 计算器clock 时钟hwclock 显示与设置硬件 ...

  9. Android学习之四大组件简单介绍

    组件是可以调用的基本功能模块.Android的应用程序就是由组件组成的,Android系统中有四个重要的组件,分别是Activity(活动).Service(服务).BroadcaseReceiver ...

最新文章

  1. 波士顿动力双足机器人Atlas放出逆天体操表演,网友:比我还强
  2. Android--SensorEventListener和AudioManager实现根据条件转换手机震动和响铃
  3. Python爬取Json格式数据并读写(改中文编码)
  4. CxImage图像处理类库说明3(转载)
  5. linux如何编译wine,利用winelib编译一个可在linux下运行的程序
  6. 【机器学习】无监督学习--(聚类)K-Means
  7. oracle影响性能,影响Oracle性能的几个重要参数
  8. onItemLongClick+onCreateContextMenu实现长按ListItem弹出不同菜单
  9. 堆插入和删除的简单实现
  10. 网游设想二:九重天[]
  11. C# winform 如何让TextBox文本内容垂直居中?
  12. 邮箱容量多大?163邮箱发邮件无限容量解读
  13. stata图像绘制专题【计量经济系列(二)】
  14. yolo极大抑制_Pytorch从0开始实现YOLO V3指南 part4——置信度阈值和非极大值抑制...
  15. 谷歌浏览器崩溃!亲测有效
  16. 使用Java校验【统一社会信用代码】真假
  17. 递归实现树状分级部门树《部门单表》
  18. 实现SSO单点登录的思考
  19. 基于struts2的留言板系统简单实现jdbc分页
  20. 安装搜狗输入法无法切到搜狗

热门文章

  1. 中西方对时间的差异_中西方时间观念差异_英文
  2. PowerShell 读取性能计数器二进制文件(.blg)记录并汇总计算
  3. java ffmpeg 直播_ffmpeg转码为直播
  4. 面向计算机架构的机器学习
  5. 【转】关于IE7 z-index问题完美解决方案
  6. 重磅干货不容错过!2017云栖大会汇总资料,速来领取!
  7. js-键盘事件案例-小人快跑
  8. 计算机应用技能大赛总结,大学生计算机应用技能大赛活动总结
  9. yii2实战之初见端倪
  10. 将机器人3维模型导入至V-rep仿真软件的方法小结