android - 使用已使用的权限恢复额外的用户数据 android.permission.MANAGE_ACCOUNTS

标签 android accountmanager

当我尝试在 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/

相关文章:

android - EditText 中的 Drawable 会导致 Activity 崩溃

android - 从 AccountManager 凭据访问取消授权和应用程序

java - 我想将加速度计的ArrayList数据转换为文本文件并存储到Android手机

android - 应用程序 :compileFlutterBuildRelease error while building app flutter

android - 如何在 PhoneGap 应用程序启动时启动 Android Activity ?

android - 如何在我的应用程序中实现 AccountManager

Android AccountManager 账户存储

android - 我可以找到我的对话的任何实例是否正在运行吗?

android - 获取用于应用内结算购买的 Google ID

android - AccountManager:什么时候设置结果?