当我尝试在 AccountManager
中显式添加帐户时,我遇到了问题。
问题
包含用户数据的包正在保存在 /data/system/users/0/accounts.db
中,但未保存恢复。
代码
// 1st step) Adding account with extra user data
String email = "<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="9af8ffeef5e8f9e9daf7fbf3f6b4f9f5f7" rel="noreferrer noopener nofollow">[email protected]</a>";
final Account a = new Account(email, getString(R.string.accountType));
final Bundle userData = new Bundle();
userData.putString("firstName", "Roberto");
final AccountManager am = AccountManager.get(context);
boolean saved = am.addAccountExplicitly(a, null, userData); // It's always returning true
// 2nd step) Restoring account and extra user data
Account[] as = am.getAccountsByType(getString(R.string.accountType)); // Assuming as.length == 1
String firstName = am.getUserData(as[0], "firstName"); // It's always null
权限
<uses-permission android:name="android.permission.MANAGE_ACCOUNTS" />
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.AUTHENTICATE_ACCOUNTS" />
但是
如果我从 list 中删除权限android.permission.MANAGE_ACCOUNTS
,一切正常。
有人能看出哪里出了问题吗?或者为什么会有这种行为?
谢谢
最佳答案
我替换了
// 1st step) Adding account with extra user data
String email = "<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="533136273c213020133e323a3f7d303c3e" rel="noreferrer noopener nofollow">[email protected]</a>";
final Account a = new Account(email, getString(R.string.accountType));
final Bundle userData = new Bundle();
userData.putString("firstName", "Roberto");
final AccountManager am = AccountManager.get(context);
boolean saved = am.addAccountExplicitly(a, null, userData);
由
// 1st step) Adding account with extra user data
String email = "<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="6c0e0918031e0f1f2c010d0500420f0301" rel="noreferrer noopener nofollow">[email protected]</a>";
final Account a = new Account(email, getString(R.string.accountType));
final AccountManager am = AccountManager.get(context);
boolean saved = am.addAccountExplicitly(a, null, null);
if (saved) {
am.setUserData(a, "firstName", "Roberto");
}
现在它起作用了,我还不明白,但是起作用了!
测试
- i9100
- i9300
- Nexus 4
关于android - 使用已使用的权限恢复额外的用户数据 android.permission.MANAGE_ACCOUNTS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23791062/