Accountmanager.addAccount()vs Accountmanager.addAccountExplicitly()

Ken*_*nji 8 account android accountmanager

为什么我们在使用Accountmanager.addAccount()所有参数创建帐户时使用Accountmanager.addAccountExplicitly().

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

更新

我们可以这样创建帐户:

 Account account = new Account(accountname, accountType);
 mAccountManager.addAccountExplicitly(account, accountPassword, null);
Run Code Online (Sandbox Code Playgroud)

Ken*_*nji 10

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

Accountmanager.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;
    }
Run Code Online (Sandbox Code Playgroud)

然后在我的活动用户选择创建一个帐户或登录.在唱歌或注册后,用户从服务器获取令牌并且操作完成,最后我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);
Run Code Online (Sandbox Code Playgroud)

  • 简而言之,“ addAccount()”显示了一个您可以在其中添加帐户的屏幕,而“ addAccountExplicitly()”实际上是在添加一个帐户。对? (2认同)

归档时间:

查看次数:

4191 次

最近记录:

7 年,2 月 前