问题

  AccountManager accountManager = AccountManager.get(this);Account[] accounts = accountManager.getAccounts();

以上代码在 Android 8.0 (API 26) 之前运行地很好,能够获取到 account 信息。但是在最新版本 8.0 上却获取不到,返回 accounts 为 null.

另外,在 Why do I get null from retrieving the user’s gmail?
也是类似的问题。

原因

后来知道,这是 Android 8.0 的 行为变更。

Account access and discoverability
In Android 8.0 (API level 26), apps can no longer get access to user accounts unless the authenticator owns the accounts or the user grants that access. The GET_ACCOUNTS permission is no longer sufficient. To be granted access to an account, apps should either use AccountManager.newChooseAccountIntent() or an authenticator-specific method. After getting access to accounts, an app can can call AccountManager.getAccounts() to access them.
Android 8.0 deprecates LOGIN_ACCOUNTS_CHANGED_ACTION. Apps should instead use addOnAccountsUpdatedListener() to get updates about accounts during runtime.
For information about new APIs and methods added for account access and discoverability, see Account Access and Discoverability in the New APIs section of this document

除非身份验证器拥有用户帐号或用户授予访问权限,否则,应用将无法再访问用户帐号。仅拥有 GET_ACCOUNTS 权限尚不足以访问用户帐号。要获得帐号访问权限,应用应使用 AccountManager.newChooseAccountIntent() 或特定于身份验证器的函数。获得帐号访问权限后,应用可以调用 AccountManager.getAccounts() 来访问帐号。

Android 8.0 已弃用 LOGIN_ACCOUNTS_CHANGED_ACTION。相反,应用在运行时应使用 addOnAccountsUpdatedListener() 获取帐号更新信息。

有关新增 API 和增加的帐号访问和可检测性函数的信息,请参阅此文档的“新增 API”部分中的帐号访问和可检测性。

另外可参考,下面这篇文章
android 8.0 —AccountManager之行为变更

解决

根据文档,

要获得帐号访问权限,应用应使用 AccountManager.newChooseAccountIntent() 或特定于身份验证器的函数。获得帐号访问权限后,应用可以调用 AccountManager.getAccounts() 来访问帐号。

于是

Intent googlePicker = AccountManager.newChooseAccountIntent(null, null,new String[] { "com.google"}, true, null, null, null, null);
startActivityForResult(googlePicker, PICK_ACCOUNT_REQUEST);
@Overrideprotected void onActivityResult(final int requestCode, final int resultCode, final Intent data) {if (requestCode == PICK_ACCOUNT_REQUEST && resultCode == RESULT_OK) {String accountName = data.getStringExtra(AccountManager.KEY_ACCOUNT_NAME);Log.d(TAG, "Account Name=" + accountName);String accountType = data.getStringExtra(AccountManager.KEY_ACCOUNT_TYPE);Log.d(TAG, "Account type=" + accountType);AccountManager accountManager = AccountManager.get(this);Account[] accounts = accountManager.getAccounts();for (Account a : accounts) {Log.d(TAG, "type--- " + a.type + " ---- name---- " + a.name);}}}

问题可以得到解决。

AccountManager getAccount 在Android O 8.0版本中获取为 null ?相关推荐

  1. android 如何在user版本中获取root权限

    前提 本文介绍的方案是在有安卓底层SDK源码的方案下实行的,若不具备这个条件的就不用往下继续看了,以免耽误你的时间. 写作目的 公司是做工程设备,运行的是安卓系统,系统使用是的user,系统上层的ap ...

  2. Android Studio 3.0+ 版本的自定义lint检查

    Android Studio 3.0+ 版本的自定义lint检查 定义LintModule 开发lint规则 lint库依赖 新建log检查规则 LogDetactor IssueRegistry 注 ...

  3. 关于Unity的SteamVR Plugin 2.0版本中SteamVR_Controller不见的问题

    考虑到VR设备输入更加多样性,Steam在2.0版本中去掉了旧的输入方式,不再有SteamVR_Controller这个脚本 steam关于2.0的介绍如下: https://steamcommuni ...

  4. Android Q(10.0)版本新特性以及兼容性适配

    北京时间2019年3月14日Google正式对外发布Android Q Beta 1及预览版SDK,这意味着安卓开发者们又即将迎来一年一度的新版本适配工作了.Android Q 为开发者们带来了许多新 ...

  5. android 蓝牙版本兼容,Android蓝牙4.0 版本兼容性问题

    在android 4.3以下的SDK中,由于各个厂商都是单独做的SDK,基本上开发出来的APP都互相不兼容,如何在android4.3以下及以上版本中做到兼容,将是以下要讲到的内容. 以samsung ...

  6. 设置hive的执行引擎_0506-如何将Hue4.0版本中默认执行引擎设置为Hive而非Impala

    温馨提示:如果使用电脑查看图片不清晰,可以使用手机打开文章单击文中的图片放大查看高清原图. Fayson的github: https://github.com/fayson/cdhproject 提示 ...

  7. android 拍照申请权限,Android拍照6.0以上动态获取权限

    ## 前言=== 在Android系统6.0以上拍照需要动态获取权限,并且在获取照片处理上也有些不同: 直接上代码吧,就不再多说了..... 具体实现 在res下新建xml文件夹,新建file_pat ...

  8. Kafka原理——fabric1.0版本中的节点排序方法

    Kafka原理 可参考Zookeeper一起理解,后续自己在项目中实现,会再来补充一些实践的内容. Zookeeper整理:https://blog.csdn.net/yangwei256/artic ...

  9. oracle12.2+asm进程,Oracle12,1,2,0版本中遇到bug25211209

    现象描述: 12.1.0.2 集群进程 ocssd.bin 占用较高的 CPU : PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  ...

最新文章

  1. 数据结构 单链表 C
  2. 通过修改注册表,实现网页链接中的私有协议启用本地exe进程
  3. linux 文件怎么不让删,请问如何设置权限,可以禁止用户删除文件
  4. 复杂存储过程学习_AI数据存储设备选型的6个关键要素
  5. 【AngularJS】—— 13 服务Service
  6. Python学习(三)-----用户输入和while循环
  7. Python第三方库使用感言
  8. C++变量初始化问题
  9. 4.4 数值分析: 局部收敛性
  10. 遭遇 kapjazy.dll,yhpri.dll,WinSys64.Sys,nwiztlbu.exe,myplayer.com 等2
  11. 计算机键盘pausebreak,键盘PauseBreak键作用
  12. Nlite后期处理技术小结(第三次更新...全文完)(by bluewind)
  13. 2023新版php仿蓝奏云网盘合集下载页面系统源码 带后台版本 源码搭建
  14. NumPy库回顾与分享(一)
  15. 【机器学习】简述多种降维算法
  16. web应用票据打印实现(四)
  17. 学计算机人都很自私,心理学家:内心极度虚伪的人,往往都有这三个特征,趁早远离!...
  18. HDMI接口ESD设计及硬件布线注意事项
  19. 2020汽车修理工(中级)实操考试视频及汽车修理工(中级)考试试题
  20. 四自由度圆柱坐标机器人设计说明书+cad图+外文翻译

热门文章

  1. 老是抓不住伦敦黄金实时行情,怎么办?
  2. 【TCO2013 Semifinal 2】 OneBlack
  3. java 伪造邮箱地址_java如何实现伪造发信地址---针对于邮件攻击
  4. mybatisplus报 Invalid bound statement (not found):
  5. 第39章 连续时间信号与系统的S域分析
  6. 干货|app自动化测试之Appium 原理 与 JsonWP 协议分析
  7. Protel 常用问题总结
  8. c盘扩容提示簇被标记_垃圾文件正在吞噬你的C盘空间!用这四种方法,还你一个干净的C盘...
  9. 在查找预编译头时遇到意外的文件结尾 是否忘记了向源中添加 include StdAfx h
  10. whl is not a supported wheel on this platform.解决办法