自動填充是某些軟件的功能,不是手機的功能。比如支付寶可以在壹些輸入驗證碼的地方自動填寫短信中的驗證碼,前提是妳的手機向支付寶開放了閱讀短信的權限,否則支付寶無法獲取妳的短信內容。
在應用開發的過程中,我們需要給用戶發送壹個驗證碼來驗證用戶的身份,但是用戶在收到短信驗證碼後,需要離開當前的應用來查看驗證碼,然後再返回到我們的應用來填寫驗證碼,這樣會給用戶帶來很多不便。android系統上的應用程序可以讀取手機上的短消息,我們可以使用這個功能來獲取我們想要的內容,並將其顯示在我們的輸入框中。
我們這次實現的函數需要ContentObserver。當我們給手機發短信時,手機會自動調用ContentObserver類中指定的方法,通知我們的應用程序短信內容的變化。我們將內容中的信息提取出來,填入我們的輸入框中?
這裏我告訴妳壹個相關的設計模式:觀察者模式:
觀察者模式是壹種軟件設計模式。在這種模式下,目標對象管理所有依賴於它的觀察者對象,並在其自身狀態發生變化時主動發出通知。這通常通過調用觀察器提供的方法來實現。這種模式通常用於實現時間處理系統。
觀察者模式完美地將觀察者和被觀察對象分離開來,在模塊之間劃定了清晰的界限,提高了應用程序的可維護性和可重用性。
觀察者設計模式定義了對象之間壹對多的依賴關系,這樣當壹個對象的狀態改變時,所有依賴它的對象都會得到通知並自動刷新。
應用到我們的例子中,我們首先在應用程序的初始操作期間向我們的系統SMS應用程序註冊壹個觀察者,並告訴我們的SMS應用程序我是您的觀察者,當您自己的狀態發生變化時,您將通知我。
讓我們來看看觀察者的基本流程:
觀察者將自己註冊在被觀察主體中,被觀察主體將觀察者存儲在容器中。
當被觀察對象發生變化時,從容器中獲取所有註冊的觀察者,並將變化通知觀察者。
觀察者告訴觀察者取消觀察,觀察者將觀察者從容器中移除。
內容觀察者的目的是觀察(捕獲)數據庫中由特定Uri引起的變化,然後做壹些相應的處理。它類似於數據庫技術中的觸發器,當Content Server觀察到的Uri發生變化時就會觸發。
要觀察特定的Uri,請按照下列步驟操作:
1.為了創建我們特定的ContentOberver派生類,我們必須重載父類構造函數和onChange()方法來處理回調後的函數實現。
2.使用context.getContetResolover()獲取ContentResolover對象,然後調用registerContentObeserver()方法註冊內容觀察者。
3.因為ContentObserver的生命周期與活動和服務不同步,所以在不需要的時候需要手動調用unregisterContentObserver()來取消註冊。