gpt4 book ai didi

android - Accountmanager.addAccount() 与 Accountmanager.addAccountExplicitly()

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:02:01 33 4
gpt4 key购买 nike

当我们可以使用 Accountmanager.addAccountExplicitly() 创建包含所有参数的帐户时,为什么我们使用 Accountmanager.addAccount()

我用谷歌搜索并发现当我们使用 Accountmanager.addAccount() 时它会触发 AbstractAccountAuthenticator addAccount 事件,但有什么意义呢?为什么我们应该使用 addAccount 方法?

已更新

我们可以这样创建账户:

 Account account = new Account(accountname, accountType);
mAccountManager.addAccountExplicitly(account, accountPassword, null);

最佳答案

经过多次尝试,我终于找到了!

账户管理器.addAccount() 和Accountmanager.addAccountExplicitly() 是非常不同的方法!

当您调用 Accountmanager.addAccount() 时,它会调用与您的 AbstractAccountAuthenticator 中相同的方法,您可以处理发生的事情。另一方面,当用户转到电话设置/帐户并选择您的自定义帐户类型并按“添加帐户”时,此方法将调用。所以我处理帐户类型和许多东西,并将用户引导至登录/注册页面。

public class MyAuthenticator extends AbstractAccountAuthenticator {

@Override
public Bundle addAccount(AccountAuthenticatorResponse response, String accountType, String authTokenType, String[] requiredFeatures, Bundle options) throws NetworkErrorException {

final Intent intent = new Intent(mContext, DirectLogin.class);
intent.putExtra(Constants.ARG_ACCOUNT_TYPE, accountType);
intent.putExtra(Constants.ARG_AUTH_TYPE, authTokenType);
intent.putExtra(Constants.ARG_IS_ADDING_NEW_ACCOUNT, true);
intent.putExtra(AccountManager.KEY_ACCOUNT_AUTHENTICATOR_RESPONSE, response);

final Bundle bundle = new Bundle();
bundle.putParcelable(AccountManager.KEY_INTENT, intent);
return bundle;
}

然后在我的 Activity 中,用户选择创建帐户或登录。登录或注册后,用户从服务器获取 token 并完成操作,最后我使用 Accountmanager.addAccountExplicitly() 来添加帐户。

    String accountName = "name";
String accountPassword = "password";
final Account account = new Account(accountName, "account_type");

AccountManager mAccountManager = AccountManager.get(getBaseContext());

String authToken = intent.getStringExtra(AccountManager.KEY_AUTHTOKEN);
String refreshToken = intent.getStringExtra(AccountManager.KEY_USERDATA);
String authTokenType = AccountGeneral.ACCOUNT_TYPE;
mAccountManager.addAccountExplicitly(account, accountPassword, null);
mAccountManager.setAuthToken(account, authTokenType, authToken);
mAccountManager.setUserData(account, "refreshToken", refreshToken);

关于android - Accountmanager.addAccount() 与 Accountmanager.addAccountExplicitly(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36353277/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com