Android AccountManager帐号管理(二)
生活随笔
收集整理的這篇文章主要介紹了
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簽名一致
還有一點:下面方法均可在主線程調用
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帐号管理(二)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 解决:npm WARN config g
- 下一篇: android sina oauth2.