【问题标题】:AccountManager fails to add account on Sony XZ 7.1.1AccountManager 无法在 Sony XZ 7.1.1 上添加帐户
【发布时间】:2017-04-27 17:36:49
【问题描述】:

我目前正在开发的应用程序最近在用户更新到 7.1.1 om 索尼手机时出现问题

在 Sony XZ 上,我们可以在尝试显式添加帐户时在日志中看到这一点:

AccountManagerService(1503): insertAccountIntoDatabase: Account {name=something@something.com, type=com.myapplication.go},因为该帐户已经存在而跳过

我们的应用程序在升级之前安装了该应用程序并添加了该帐户。似乎该帐户尚未完全删除/重新添加。

我们如何才能在我们的应用中从中恢复? 为什么会这样? 我在 Nougat 预览版中读过类似的问题,但我们无法使用 removeAccountExplicitly 从中恢复,然后按照下面链接中的建议再次添加它。结果和上面一样,卸载应用不会清除账号,手机也不会重启。

AccountManager does not add custom account in Android N preview

【问题讨论】:

    标签: android sony accountmanager android-7.1-nougat


    【解决方案1】:

    我们找到了问题的可能原因和解决方案。

    症状

    TL;DR这是索尼的错。

    从我们的用户群来看,似乎只有 Sony XZ 用户在将设备升级到 7.1.1 之前使用了我们的应用。

    我们甚至购买了几台 Sony XZ 设备(并最终将它们退回商店),将它们从 Android 6.0 升级到 7.1.1 并试图重现该问题。但没有运气。

    但是,我们找到了另一种使用 Android 模拟器实现相同“症状”的方法。步骤是:

    1. 启动模拟器
    2. 登录到您的应用(以便将用户添加到 AccountManager)
    3. 转到终端,然后执行以下操作

    步骤:

    adb shell
    su
    cd /data/system_de/0/
    rm accounts_de.db
    
    1. 重启你的模拟器
    2. 从现在开始,您的问题可以重现。

    此外,如果您检查/data/system_ce/0/accounts_ce.db,您会看到这是一个仍然包含您以前的用户的数据库。这很可能是AccountManager 不允许您再次插入同一用户的原因。

    在更新到 Android 7.1.1 期间,Sony 似乎以某种方式损坏了包含原始帐户的 accounts_de.db

    解决方案

    由于同名帐户已经在数据库中(并且您不能从那里真正删除它),我们基本上不能再次插入具有相同用户名的用户。但是,我们可以插入用户名略有更新的帐户:

    if (!accountManager.addAccountExplicitly(account, password, bundle)) {
        // We failed to add the account. Fallback to workaround.
        accountManager.addAccountExplicitly(
            new Account(username + "\n", accountType), // this line solves the issue
            password,
            bundle
        );
    }
    

    由于此帐户现在与原始帐户不同(感谢\n 字符),因此可以将其插入到 AccountManager 数据库中。

    【讨论】:

    • 我能够重现此问题。但是如果以常规方式添加帐户失败,“\n”后缀可能应该仅用作后备,对吧?否则,尚未将设备更新到 Android 7.1.1 的用户将再次面临同样的问题。
    • @Mauin 是的,只有当 addAccountExplicitly 返回我们 false 时,我们才会添加“\n”
    • @DmitryZaytsev 是否​​仍可通过调用 accountManager.getAccountsByType() 访问旧帐户?还是为了所有意图和目的而隐藏,但继续阻止添加新帐户?
    • @DmitryZaytsev 谢谢!万一其他人在谷歌上搜索这个问题,我们的一位用户在清除 google play 服务数据后发生了这种情况。
    【解决方案2】:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-28
      • 2012-10-15
      • 2014-12-30
      • 1970-01-01
      • 2015-05-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多