有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java AccountManager:invalidateAuthToken不会使令牌无效

我试图从Android设备中存储的谷歌账户中获取一个全新的令牌,但我得到的只是过去几天缓存的同一个旧令牌。它似乎被缓存在手机的某个地方,甚至连互联网请求都没有被发送(我在没有互联网连接的应用程序中进行了测试,并返回了相同的令牌)

我使用了invalidateAuthToken方法,然后从AccountManagerFuture获得了一个带有getResult的新方法。请看一看:

public String updateToken(Activity activity) throws Exception {             
    AccountManager am = AccountManager.get(activity);
    Account[] accounts = am.getAccountsByType("com.google");

    if (accounts == null || 
        accounts.length == 0 || 
        "".equals(accounts[0].name.trim())) 
    {
        throw new Exception("Não há contas Google configuradas no smartphone.");
    } 
    else if (!"crsilva@gmail.com".equals(accounts[0].name.trim()) && 
             !"cristiano.bezerra@sulamerica.com.br".equals(accounts[0].name.trim()) &&
             !"tholiver@gmail.com".equals(accounts[0].name.trim())) 
    {
        Log.w("Util.updateToken","conta obtida: " + accounts[0].name);
        throw new Exception("Conta Google não autorizada.");
    }
    Log.w("Util.updateToken","conta obtida: " + accounts[0].name);
    am.invalidateAuthToken("com.google", null);
    Log.w("Util.updateToken","Passou do invalidateAuthToken");
    AccountManagerFuture<Bundle> future = 
        am.getAuthToken(accounts[0], "ah", null, activity, null, null);
    Log.w("Util.updateToken","Passou do getAuthToken");
    Bundle bundle = future.getResult();
    Log.w("Util.updateToken","Passou do getResult");
    future = null;
    am = null;
    accounts = null;
    String authToken = bundle.getString(AccountManager.KEY_AUTHTOKEN);
    Log.w("Util.updateToken","Token: " + authToken);
    return authToken;
}

一个线程通过单个实例从Util类调用此方法。清单具有所有必要的权限。有人知道为什么令牌没有刷新吗


共 (0) 个答案