AbstractAccountAuthenticator getAuthToken未被调用

时间:2016-08-14 17:58:40

标签: android token accountmanager

我正在使用AbstractAccountAuthenticator的自定义实现,并且我已根据文档实现了getAuthToken。我一直在关注本教程:http://blog.udinic.com/2013/04/24/write-your-own-android-authenticator/

我不了解何时调用AbstractAccountAuthenticator实现中的getAuthToken方法。我已经在清单中设置了我创建的实现它的服务,创建了登录页面并可以添加帐户,添加令牌并使用AccountManager类从我的代码中获取令牌,但是在任何文档中都没有解释何时调用AbstractAccountAuthenticator代码。

有人可以帮助我理解为什么我似乎不必使用它时必须实现autheniticator。

2 个答案:

答案 0 :(得分:0)

在AuthenticatorActivity.java

private void finishLogin(Intent intent) {
    Log.d("udinic", TAG + "> finishLogin");

    String accountName = intent.getStringExtra(AccountManager.KEY_ACCOUNT_NAME);
    String accountPassword = intent.getStringExtra(PARAM_USER_PASS);
    final Account account = new Account(accountName, intent.getStringExtra(AccountManager.KEY_ACCOUNT_TYPE));

    if (getIntent().getBooleanExtra(ARG_IS_ADDING_NEW_ACCOUNT, false)) {
        Log.d("udinic", TAG + "> finishLogin > addAccountExplicitly");
        String authtoken = intent.getStringExtra(AccountManager.KEY_AUTHTOKEN);
        String authtokenType = mAuthTokenType;

        // Creating the account on the device and setting the auth token we got
        // (Not setting the auth token will cause another call to the server to authenticate the user)
        mAccountManager.addAccountExplicitly(account, accountPassword, null);
        mAccountManager.setAuthToken(account, authtokenType, authtoken);
    } else {
        Log.d("udinic", TAG + "> finishLogin > setPassword");
        mAccountManager.setPassword(account, accountPassword);
    }

    setAccountAuthenticatorResult(intent.getExtras());
    setResult(RESULT_OK, intent);
    finish();
}

mAccountManager.setAuthToken(account, authtokenType, authtoken);已设置令牌。您可以删除该行,并添加一个新帐户,然后调用getAuthToken,该方法将被调用。

答案 1 :(得分:0)

在authenticator.xml中设置android:customTokens =“ true”允许在我的abstractaccountauthenticator类的实现中调用getAuthToken方法