Kar*_*erg 7 android sony accountmanager android-7.1-nougat
我正在开发的应用程序最近在用户更新到7.1.1手机索尼手机时出现了问题
在Sony XZ上,我们可以在尝试显式添加帐户时在日志中看到这一点:
AccountManagerService(1503):insertAccountIntoDatabase:帐户{name=something@something.com,type = com.myapplication.go},跳过,因为该帐户已存在
安装了应用程序,并在升级之前由我们的应用程序添加了帐户.似乎该帐户尚未完全删除/重新读取.
我们的应用程序如何从中恢复?为什么会这样?我已经在Nougat预览中读过类似的问题,但我们无法使用removeAccountExplicitly从中恢复,然后按照下面链接中的建议再次添加它.结果与上面相同,并且应用程序的卸载不会清除帐户,也不会重新启动手机.
我们找到了问题的可能原因和解决方案.
TL; DR这是索尼的错.
在我们的用户群中,看起来只有索尼XZ用户在将设备升级到7.1.1之前使用了我们的应用程序.
我们购买了几台Sony XZ设备(并最终将它们送回商店),将它们从Android 6.0升级到7.1.1并试图重现这个问题.但没有运气.
但是,我们发现了使用Android模拟器实现相同"症状"的另一种方法.步骤是:
脚步:
adb shell
su
cd /data/system_de/0/
rm accounts_de.db
Run Code Online (Sandbox Code Playgroud)
此外,如果您检查,/data/system_ce/0/accounts_ce.db
您将看到这是一个仍包含您以前用户的数据库.这很可能是为什么AccountManager
不允许您再次插入相同的用户.
看起来在更新到Android 7.1.1期间,索尼以某种方式损坏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
);
}
Run Code Online (Sandbox Code Playgroud)
由于此帐户现在与原始帐户不同(由于\n
字符),因此可以将其插入到AccountManager数据库中.
归档时间: |
|
查看次数: |
1394 次 |
最近记录: |