Android AccountManager 需要覆盖 AuthToken

Android AccountManager needs to overwrite AuthToken

您好,我想明确覆盖客户经理现有的 AuthToken。我尝试使用此代码段

Log.d(TAG, "finishRenewal");
AccountManager manager = AccountManager.get(context);
Account[] accounts = manager.getAccountsByType(AccountGeneral.ACCOUNT_TYPE);
for(Account ac : accounts){
  manager.setAuthToken(ac, AccountGeneral.ACCOUNT_TYPE, authToken);
}

但我似乎无法检索 AuthToken。它总是给以前的 AuthToken。

顺便说一句:我正在通过此调用检索令牌

 AccountManagerFuture<Bundle> future = mAccountManager
    .getAuthTokenByFeatures(accountType, authTokenType, null, act, null, null,
        new AccountManagerCallback<Bundle>() {
          @Override
          public void run(AccountManagerFuture<Bundle> future) {
            Bundle bnd = null;
            try {
              bnd = future.getResult();
              final String authtoken = bnd.getString(AccountManager.KEY_AUTHTOKEN);
              final String userName = bnd.getString(AccountManager.KEY_ACCOUNT_NAME);
              Log.d(TAG, "GetTokenForAccount Bundle is " + bnd);
              if (listener != null) {
                listener.onAccountAcquired(userName, authtoken);
              }
            } catch (Exception e) {
              e.printStackTrace();
              if (listener != null) {
                listener.onFail();
              }
            }
          }
        }
        , null);

我的猜测是第二个代码片段中 authTokenType 的值不等于第一个代码片段中的 AccountGeneral.ACCOUNT_TYPE

当您设置授权令牌时,您的代码将 AccountGeneral.ACCOUNT_TYPE 作为 AuthTokenType 传递。设置 authtoken 时,请确保使用正确的 AuthTokenType,而不是帐户类型。

A​​uthTokenType 通常与帐户类型不同,因为它们标识不同的东西。