Accountmanager.addAccount()vs Accountmanager.addAccountExplicitly()

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

Accountmanager.addAccount()了,并找出当我们使用Accountmanager.addAccount()它触发AbstractAccountAuthenticator addAccount事件,但是有什么意义呢? 为什么我们应该使用addAccount方法?

大功率的

我们可以这样创build账户:

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

Solutions Collecting From Web of "Accountmanager.addAccount()vs Accountmanager.addAccountExplicitly()"

我终于find了很多尝试!

Accountmanager.addAccount()和Accountmanager.addAccountExplicitly()是非常不同的方法!

当你调用Accountmanager.addAccount()时,它会调用与AbstractAccountAuthenticator中相同的方法来处理发生的事情。 另一方面,当用户去电话设置/帐户,并select您的自定义帐户types,然后按“添加一个帐户”此方法将调用。 所以我处理帐户types和许多东西,并指导用户login/启动页面。

 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; } 

然后在我的活动用户select创build一个帐户或login后, Accountmanager.addAccountExplicitly()或注册用户从服务器获取令牌和行动完成,最后我使用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); 

Accountmanager.addAccount()必须用于要求用户创build某种types的帐户。 用户必须批准并与设备进行交互,以便确实创build帐户。 这个方法可以用来创build任何types的账户。

AccountManager.addAccountExplicitely()允许您在没有用户批准/交互的情况下创build账户,但仅限于账户types,authentication者与您的签名具有相同的签名。