日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android AccountManager帐号管理(二)

發布時間:2023/12/15 Android 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android AccountManager帐号管理(二) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Android AccountManager 帳號管理(一)分享了如何將自己的帳號體系注冊到系統服務AccountManagerService,統一由AccountManager來管理,這僅是自己的一點理解;但開發者對接的工作遠不止如此,還有用戶登錄完成后如何將帳號添加到系統數據庫中等等,AccountManager都有提供相對應的接口

在說接口之前,先看一下AccountManager會用到的兩個接口類

一個是android.accounts.AccountManagerFuture

AccountManagerFuture類似于java的Future,提供了對AccountManager任務的執行進行取消,查詢是否已經被取消,是否完成以及獲取執行結果,通過getResult方法獲取執行結果,該方法會阻塞直到任務返回結果

public interface AccountManager<V> { /**取消任務的執行 如果任務已經完成/已經取消/不能被取消,則返回false */ boolean cancel(boolean mayInterruptIfRunning); /**任務是否被取消 如果任務在完成之前被取消,則返回true */ boolean isCancelled(); /**任務是否完成 */ boolean isDone(); /**獲取任務的執行結果 這個接口可能會阻塞當前線程,直到任務完成/任務被cancel,故不要在主線調用此接口 */ V getResult() throws OperationCanceledException, IOException, AuthenticatorException; /**同上 參數規定了等待的時間timeout,如果超時,則會直接被cancel */ V getResult(long timeout, TimeUnit unit) throws OperationCanceledException, IOException, AuthenticatorException; }

另一個是android.accounts.AccountManagerCallback

AccountManagerCallback,即AccountManager接口的回調,可在主線程執行

public interface AccountManagerCallback<V> {void run(AccountManagerFuture<V> future); }

接下來分享一點自己對AccountManager提供的接口的理解,接口協議是由IAccountManager定義的

1. 獲取AccountManager實例:

/** 獲取AccountManager實例 備注:context最好傳遞application context,避免可能的不必要的內存泄漏 */ public static AccountManager get(Context context);

2. 針對于注冊帳號的authenticator app,需了解以下接口

下面這些即將列出的方法主要是for authenticator app,其他需要app主要是調用authToken相關方法
所以下面下列方法的調用是有權限求的:調用下面接口的app,要與對應帳號的authenticator app簽名一致
還有一點:下面方法均可在主線程調用

/** 將一個帳號直接存儲到AccountManager */ public boolean addAccountExplicitly(Account account, String password, Bundle userdata) /** 獲取account的password(不一定是真實的用戶密碼,看authenticator app的存儲) */ public String getPassword(final Account account); /** 重置該account的password 注意:調用這個方法會清除該賬號所有authToken在AccountManager中的緩存 */ public void setPassword(final Account account, final String password) ; /** 清除account的password 注意: 調用這個方法會清除該賬號的password及authToken在AccountManager中的緩存 */ public void clearPassword(final Account account) ; /** 將account對應key-value存儲在AccountManager中 */ public void setUserData(final Account account, final String key, final String value); /** 獲取和該帳號相關的對應key值的value */ public String getUserData(final Account account, final String key); /** 從AccountManager中刪除account,由authenticator app決定是否可以刪除該帳號 注意:這個方法可以在主線程調用,但是返回的AccountManagerFuture不能在主線程中使用 */ public AccountManagerFuture<Bundle> removeAccount(final Account account, final Activity activity, AccountManagerCallback<Bundle> callback, Handler handler); /** 直接從AccountManager數據庫中刪除account */ public boolean removeAccountExplicitly(Account account);

3. 下面接口供需要使用帳號服務的apps調用,當然authenticator app也可調用

/** 獲取和該帳號相關的對應key值的value 備注:這個方法可在主線程調用 權限要求:和注冊account的authenticator app簽名一致 */ public String getUserData(final Account account, final String key); /** 獲取當前注冊到AccountManager中的所有authenticator app的屬性(即在authenticator xml中定義的account屬性,再加上authenticator app的包名) 備注:這個方法可在主線程調用 */ public AuthenticatorDescription[] getAuthenticatorTypes(); /** 獲取當前存儲到AccountManager的所有帳號列表,和getAccountsByType(null)相同 備注:這個方法可在主線程調用 權限要求:需要GET_ACCOUNTS的權限(這個權限在android 6.0及以上是運行時權限,需要動態申請) */ public Account[] getAccounts() ;public Account[] getAccountsByTypeForPackage(String type, String packageName) ; /** 獲取特定account type 備注:這個方法可在主線程調用 權限要求:需要GET_ACCOUNTS的權限(這個權限在android 6.0及以上是運行時權限,需要動態申請) */ public Account[] getAccountsByType(String type);/** 刪除存儲AccountManager中此賬號類型對應的authToken緩存,應用必須調用這個方法將緩存的authToken置為過期,否則getAuthToken獲取到的一直是緩存的token 備注:這個方法可以在主線程中調用 */ public void invalidateAuthToken(final String accountType, final String authToken) ; /** 獲取AccountManager緩存的某個賬號對應authTokenType的authToken 如果緩存中沒有對應authTokenType的token值,并不會重新生成,而是直接返回false 備注:這個方法可以在主線程中調用 權限要求:和注冊account的authenticator app簽名相同 */ public String peekAuthToken(final Account account, final String authTokenType) ; /** 將一個account對應autheTokenType的authToken緩存在AccountManager中 備注:這個方法可以在主線程中調用 權限要求:和注冊account的authenticator app簽名相同 */ public void setAuthToken(Account account, final String authTokenType, final String authToken); /** 同步獲取account對應authTokenType的authToken notifyAuthFailure,如果authenticator app返回出錯,要不要彈通知提醒 備注:這個方法可以可能涉及到網絡請求,不要在主線程調用 權限要求:和注冊account的authenticator app簽名相同 */ public String blockingGetAuthToken(Account account, String authTokenType, boolean notifyAuthFailure); /** 權限要求:和注冊account的authenticator app簽名相同 */ public AccountManagerFuture<Bundle> getAuthToken(final Account account, final String authTokenType, final Bundle options, final Activity activity, AccountManagerCallback<Bundle> callback, Handler handler); /** 權限要求:和注冊account的authenticator app簽名相同 */ public AccountManagerFuture<Bundle> getAuthToken(final Account account, final String authTokenType, final Bundle options, final boolean notifyAuthFailure, AccountManagerCallback<Bundle> callback, Handler handler); /** 要求用戶添加某個特定accountType的帳號,如沒有則會引導注冊(authenticator app自己的處理) 注意:調用這個接口會調起authenticator app帳號登錄的頁面。傳的activity參數就是用來啟動這個intent的:如果傳的activity參數不為null,則AccountManager會自動幫你start 登錄的intent,否則你自己調用future.getResult(),返回的結果中會有AccountManager#KEY_INTENT對應的帳號登錄頁面的intent */ public AccountManagerFuture<Bundle> addAccount(final String accountType, final String authTokenType, final String[] requiredFeatures, final Bundle addAccountOptions, final Activity activity, AccountManagerCallback<Bundle> callback, Handler handler); /** 認證用戶的身份(一般是驗證帳號的密碼) 注意:驗證的行為由authenticator app來定義,同addAccount會調起authenticator app認證的頁面 */ public AccountManagerFuture<Bundle> confirmCredentials(final Account account, final Bundle options, final Activity activity, final AccountManagerCallback<Bundle> callback, final Handler handler);

4. 除了以上接口外,還有一些獲取帳號屬性等接口

/** 獲取當前注冊到AccountManager中的所有authenticator app的屬性(即在authenticator xml中定義的account屬性,再加上authenticator app的包名) 備注:這個方法可在主線程調用 */ public AuthenticatorDescription[] getAuthenticatorTypes();

總結

以上是生活随笔為你收集整理的Android AccountManager帐号管理(二)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。