IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> accounts账号管理分析 -> 正文阅读

[移动开发]accounts账号管理分析

accounts账号管理分析

源码路径frameworks\base\core\java\android\accounts

原生代码主要提供有

3个接口:

AccountManagerCallback<V>

AccountManagerFuture<V>

OnAccountsUpdateListener

6个类:

Account

AccountManager

AbstractAccountAuthenticator

AccountAuthenticatorActivity

AccountAuthenticatorResponse

AuthenticatorDescription

4个异常处理:

AccountsException

AuthenticatorException

NetworkErrorException

OperationCanceledException

一.??接口

OnAccountsUpdateListener

public interface OnAccountsUpdateListener {

????void onAccountsUpdated(Account[] accounts);

}

AccountManagerFuture<V>

package android.accounts;

import java.util.concurrent.TimeUnit;

import java.io.IOException;

public interface AccountManagerFuture<V> {

????boolean cancel(boolean mayInterruptIfRunning);

????boolean isCancelled();

????boolean isDone();

????V getResult() throws OperationCanceledException, IOException, AuthenticatorException;

????V getResult(long timeout, TimeUnit unit)

????????????throws OperationCanceledException, IOException, AuthenticatorException;

}

AccountManagerCallback<V>?

public interface AccountManagerCallback<V> {

????void run(AccountManagerFuture<V> future);

}

二。类

Account——表示AccountManager中的帐户的值类型。这个对象是Parcelable的,并且重写了equals(Object)和hashCode(),因此它适合作为Map的键使用。

? public final String name;

??public final String type;

??? public boolean equals(Object o) {

????????if (o == this) return true;

????????if (!(o instanceof Account)) return false;

????????final Account other = (Account)o;

????????return name.equals(other.name) && type.equals(other.type);

????}

????public int hashCode() {

????????int result = 17;

????????result = 31 * result + name.hashCode();

????????result = 31 * result + type.hashCode();

????????return result;

????}

AccountManager——管理设备上的所有帐户,并运行该显示。应用程序可以从它请求auth- token,这是它的工作。无论它是否意味着它需要打开一个新的“登录”/“创建帐户”活动,或者检索先前请求的存储的auth- token,AccountManager知道要调用谁以及在每个场景中做什么来完成任务。

addAccount() :添加一个帐户。

addAccountExplicitly(): 直接添加一个帐户到AccountManager。

getAccounts():获取所有帐户。

getAccountsByType(String package):获取指定的账号

removeAccount():删除帐户

AccountAuthenticator——一个处理特定帐户类型的模块。AccountManager找到合适的AccountAuthenticator与它进行对话,以执行account类型上的所有操作。AccountAuthenticator知道向用户显示哪些活动来输入他的凭据,以及在哪里找到服务器已经返回的任何存储的auth- token。在单一帐户类型下,这可能是许多不同服务的共同之处。例如,谷歌在Android上的authenticator正在验证谷歌邮件服务(Gmail)以及谷歌日历和谷歌驱动器等其他谷歌服务。

AbstractAccountAuthenticator——创建AccountAuthenticator的抽象基类。为了成为身份验证者,必须扩展该类,为抽象方法提供实现,并编写一个服务,该服务将返回服务的Service.onBind(android.content.Intent)中getIBinder()的结果。此服务必须在其AndroidManifest.xml文件中指定以下意图筛选器和元数据标记

<intent-filter>

?????<action android:name="android.accounts.AccountAuthenticator" />

???</intent-filter>

???<meta-data android:name="android.accounts.AccountAuthenticator"

?????????????android:resource="@xml/authenticator" />

在实现类中需要复写他的抽象方法,一共7个。如下:

1.editProperties:返回一个Bundle,其中包含可用于编辑属性的活动的Intent,如果无返回,可以直接返回null,或者抛出常,例如new UnsupportedOperationException()。

2.addAccount:添加指定的accountType的帐户。(重要)当用户在添加账户页面选择账户进行添加或者调用accountManager.addAccount 的时候,AbstractAccountAuthenticator中的addAccount 方法会被默认调用,因此需要重写addAccount 方法。

3.confirmCredentials:检查用户是否知道帐户的凭据。连接服务器进行身份校验。如果无校验可以返回返回null,或者抛出常。

4.getAuthToken:获得一个账户authtoken。(重要)当执行AccountAuthenticatorActivity中的mAccountManager.blockingGetAuthToken(account,Constants.AUTHTOKEN_TYPE,NOTIFY_AUTH_FAILURE);时调用该方法。如果之前成功获取过AuthenToken会缓存,之后不会在调用getAuthenToken()方法,除非调用invalidateAuthenToken()。

5.getAuthTokenLabel:向认证者询问给定的authTokenType的本地化标签。如果无,可以直接返回null,或者抛出异常。

6.updateCredentials:更新帐户的本地存储的凭据。如果无更新,可以直接返回null,或者抛出异常。

7.hasFeatures:检查帐户是否支持所有指定的验证器特定功能。如果不需要可以直接返回null,或者抛出异常。

AccountAuthenticatorResponse--序列化的对象类, 用于将响应传达回 AccountManager 的对象

private IAccountAuthenticatorResponse mAccountAuthenticatorResponse;

/**

* @hide

*/

@UnsupportedAppUsage

public AccountAuthenticatorResponse(IAccountAuthenticatorResponse response) {

????mAccountAuthenticatorResponse = response;

}

public AccountAuthenticatorResponse(Parcel parcel) {

????mAccountAuthenticatorResponse =

????????????IAccountAuthenticatorResponse.Stub.asInterface(parcel.readStrongBinder());

}

AuthenticatorDescription-序列化的对象类,包含有关帐户验证器信息的可包裹值类型。

public AuthenticatorDescription(String type, String packageName, int labelId, int iconId,int smallIconId, int prefId, boolean customTokens)

完整 AuthenticatorDescription 的构造函数

AccountAuthenticatorActivity——基类被称为“登录/创建账户”活动的身份当用户需要确定自己。该活动负责对服务器的登录或帐户创建过程,并将auth- token返回给调用authenticator。 这个类在API级别30中被废弃。

public final void setAccountAuthenticatorResult(Bundle result) {

????mResultBundle = result;

}

protected void onCreate(Bundle icicle) {

????super.onCreate(icicle);

????mAccountAuthenticatorResponse =

????????????getIntent().getParcelableExtra(AccountManager.KEY_ACCOUNT_AUTHENTICATOR_RESPONSE);

????if (mAccountAuthenticatorResponse != null) {

????????mAccountAuthenticatorResponse.onRequestContinued();

????}

}

public void finish() {

????if (mAccountAuthenticatorResponse != null) {

????????// send the result bundle back if set, otherwise send an error.

????????if (mResultBundle != null) {

????????????mAccountAuthenticatorResponse.onResult(mResultBundle);

????????} else {

????????????mAccountAuthenticatorResponse.onError(AccountManager.ERROR_CODE_CANCELED,

????????????????????"canceled");

????????}

????????mAccountAuthenticatorResponse = null;

????}

????super.finish();

}

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2021-08-11 12:31:59  更:2021-08-11 12:34:56 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 5:57:22-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码