Aus*_*ney 11 java android accountmanager
我通过扩展AbstractAccountAuthenticator和实现addAccount()和创建了自己的Android帐户身份验证器getAuthToken().其中的一些方法被称为AccountManager,但其他方法则没有.
AccountManager accountManager = AccountManager.get(activity);
accountManager.addAccount(MyAccountAuthenticator.ACCOUNT_TYPE,
MyAccountAuthenticator.AUTHTOKEN_TYPE_FULL_ACCESS, null, null,
activity, callback, null);
Run Code Online (Sandbox Code Playgroud)
当我打电话给AccountManager#getAuthToken()我时,问题就出现了Activity.AccountManager不会调用getAuthToken()我在我的定义中的方法AccountAuthenticator.它调用一些其他默认方法,只检查authToken启动之前是否存在AuthenticatorActivity.
getAuthToken()方法:AccountManager accountManager = AccountManager.get(activity);
accountManager.getAuthToken(
mAccount, MyAccountAuthenticator.AUTHTOKEN_TYPE_FULL_ACCESS, null,
activity, callback, handler);
Run Code Online (Sandbox Code Playgroud)
我创建了我的服务并定义了onBind().addAccount()不应该工作.
public IBinder onBind(Intent intent) {
return intent.getAction().equals(ACTION_AUTHENTICATOR_INTENT) ? new MyAccountAuthenticator(this).getIBinder() : null;
}
Run Code Online (Sandbox Code Playgroud)
编辑:我addAccountExplicitly在MyAuthenticatorActivity应用程序获取用户的身份验证令牌后调用.
课堂上的片段MyAuthenticatorActivity extends AccountAuthenticatorActivity:
if (getIntent().getBooleanExtra(KEY_IS_ADDING_NEW_ACCOUNT, false)) {
// Creating the account on the device and setting the auth token we recieved
accountManager.addAccountExplicitly(account, null, null);
}
Run Code Online (Sandbox Code Playgroud)
Tom*_*m G 28
您的评论非常清楚 - 如果您为帐户设置了身份验证令牌,那么getAuthToken在令牌失效之前,您的方法将不会被调用.您通常通过在收到401或403时调用invalidateAuthToken或者从Web服务获得什么来执行此操作.
从Javadoc的getAuthToken方法:
如果为此帐户缓存先前生成的身份验证令牌并键入,则会返回该令牌.否则,如果保存的密码可用,则会将其发送到服务器以生成新的身份验证令牌.否则,提示用户输入密码.
由于您的令牌位于缓存中,因此会直接返回,并且不会查询您的身份验证器.
| 归档时间: |
|
| 查看次数: |
4924 次 |
| 最近记录: |