編輯:關於android開發
每個人都喜歡自己的名字被他人記住,同樣地,如果想讓您的應用程序更人性化,為不同的用戶提供不同的用戶體驗,以及自定義配置,那麼就需要記錄用戶的個人信息。當用戶從舊的設備更新到新的設備,或者從一台設備切換到另一台設備上面(例如用戶擁有一台平板電腦和手機,並且經常在兩者之間切換),您的應用應當可以准確識別出用戶,那麼如何才能區分用戶和記錄用戶信息,並且准確地鑒別用戶身份,本文的目的就是要解決上面提到的問題。
對於大多數應用來說, 賬戶管理器 就足夠了,利用其提供的API,只要獲得用戶的權限許可,就可以很容易地取得當前設備上已經存儲的用戶賬戶名信息。
集成用戶帳號的管理,可以讓您的應用程序完成如下的功能:
應用程序通常使用如下的3種技術來進行賬戶的管理:
方案(1)的缺點如下:首先,每次啟動應用程序之前都需要輸入用戶名的信息,程序顯得不太友好,吸引力不足,其次,沒有好的辦法來保證用戶名的唯一性。
方案(2)較方案(1)來說為用戶減輕了一點負擔,但是它很難保證用戶的准確性。因為您的應用程序僅僅是與具體的設備綁定在了一起,想象一下,用戶從一台舊設備升級到了新設備,在新設備上面運行應用的時候,您的應用程序就不再記得該用戶了。
方案(3)是首選的解決方案,通過利用系統提供的 AccountManager,您可以獲取當前設備上面已經存儲的用戶身份信息,不論用戶擁有多少台設備,只要用戶登錄了該設備,那麼您就可以准確地識別該用戶。對於您應用程序的設計來說,也僅僅是加入幾個多余的 UI 界面而已。
Android 設備可以存儲不同類型的賬戶信息,當您通過 來進行賬戶查詢的時候,通常需要利用賬戶類型來進行過濾,賬戶類型(account type)是一個字符串,要求唯一性,用來和系統中已存儲的其他類型的賬戶進行區分,例如,Google 的賬戶類型是 “com.google”,Twitter 的賬戶類型是 “com.twitter.android.auth.login”,當然可以利用自己的個人域名來進行區分,例如 “com.zhourunsheng.com”。
如果要讀取當前設備上面的賬戶信息,您的應用需要 權限,在 manifest 文件的 tag 中添加
示例代碼
<manifest ... > <uses-permission android:name="android.permission.GET_ACCOUNTS" /> ... </manifest>
一旦確定了賬戶的類型,您就可以通過 來進行查詢了。首先通過調用 來獲得一個 AccountManager 實例對象,然後調用它的成員函數 ,通過傳遞賬戶類型的參數,就能得到該賬戶類型下面的所有用戶的一個用戶列表。
示例代碼
AccountManager am = AccountManager.get(this); // "this" references the current Context Account[] accounts = am.getAccountsByType("com.google");
函數調用返回一個包含所有帳號 的數組。
假如查詢結果多於一個用戶,那麼在您的應用中應當彈出一個對話框來讓用戶選擇其中一個賬戶為該應用的當前賬戶。
用戶帳號 中包含了用戶名信息,Google 的賬戶存儲的是用戶的 Email 地址,您可以使用這些信息來擴展您的應用,比如:
通過用戶帳號 可以很方便的區分用戶,但是 Account 本身並不提供任何數據的保護機制,如果您的應用中需要用戶訪問在線數據庫的私有數據,那麼需要另一種訪問控制方式: authentication (驗證),這會在下一節課中講到,通過編寫一個自定義的驗證機制來訪問您應用程序的在線私有數據庫。
參考文摘:
轉自:http://blog.zhourunsheng.com/2012/01/android-%e7%94%a8%e6%88%b7%e7%ae%a1%e7%90%86%e4%b8%93%e9%a2%98%e4%b9%8b%e8%ae%b0%e5%bd%95%e7%94%a8%e6%88%b7%e8%ba%ab%e4%bb%bd/ | 潤物無聲
安卓的主要幾大布局,安卓布局今天我們的主要內容就是安卓的主要幾個基礎的布局方式。(主要布局如下:) 1.線性布局(LinerLayout) 2.相對布局(Relative
JSON解析和XML解析對比,JSON解析XML解析 JSON解析和XML解析是較為普遍的兩種解析方式,其中JSON解析的市場分額更大
上一節中講了Fragment概述及用法,本節繼續講解Fragment的創建和生
Genymotion 下載安裝常見錯誤一條龍,genymotion常見錯誤Genymotion 安卓模擬器確實比安卓原生的模擬器快,但是除了快就找不到其他優點了... 曾
ErrorExecution failed for task '