Android短信驗證碼自動填寫功能的實現

點擊查看詳情博客

前言

android應用經常會涉及到注冊登錄功能,而許多的注冊登錄或修改密碼功能常常需要輸入短信驗證碼,通常,用戶收到短信需要最小化應用去查看短信再填入驗證碼,必然比較麻煩,因此有必要能夠自動獲得下發的短信驗證碼,方便了用戶的操作,用戶體驗更好。


原理講解

主要就是實時獲取短信信息。涉及到ContentObserver類的使用。使用ContentProvider來監聽短信數據庫的變化,在自定義的ContentObserver當中實現onChange的方法進行監聽特定手機號的短信,然后進行信息截取在填充到需要填充的位置。

ContentObserver即為內容監聽者,當我們發送一條短信到手機上時,手機會自動調用ContentObserver中的指定方法用來通知短信發生了變化,接著我們讀取短信中的內容,將驗證碼提取出來自動填入到輸入框中,這樣就完成了自動填寫功能。ContentObserver類主要監聽短信內容的變化,這里涉及到android常用的一種設計模式即觀察者模式。


ContentObserver講解-觀察者模式

觀察者模式(有時又被稱為發布(publish )-訂閱(Subscribe)模式、模型-視圖(View)模式、源-收聽者(Listener)模式或從屬者模式)是軟件設計模式的一種。在此種模式中,一個目標物件管理所有相依于它的觀察者物件,并且在它本身的狀態改變時主動發出通知。這通常透過呼叫各觀察者所提供的方法來實現。此種模式通常被用來實現事件處理系統。

觀察者模式(Observer)完美的將觀察者和被觀察的對象分離開。觀察者模式在模塊之間劃定了清晰的界限,提高了應用程序的可維護性和重用性。

觀察者設計模式定義了對象間的一種一對多的依賴關系,以便一個對象的狀態發生變化時,所有依賴于它的對象都得到通知并自動刷新。

ContentObserver——內容觀察者,目的是觀察(捕捉)特定Uri引起的數據庫的變化,繼而做一些相應的處理,它類似于數據庫技術中的觸發器(Trigger),當ContentObserver所觀察的Uri發生變化時,便會觸發它。

觀察者(即我們的應用):Observer將自己注冊到被觀察對象(Subject)中,被觀察對象將觀察者存放在一個容器(Container)里。

被觀察(即系統的短信應用):被觀察對象發生了某種變化,從容器中得到所有注冊過的觀察者,將變化通知觀察者。

撤銷觀察:觀察者告訴被觀察者要撤銷觀察,被觀察者從容器中將觀察者去除。

具體到我們的項目中,也就是說,當應用剛開始運行的時候,會向我們手機系統的短信應用注冊一個觀察者,當短信發生變化的時候,短信應用會通知所注冊的觀察者發生了變化,我們的觀察者收到這樣的通知時,就會根據代碼執行相應的操作,從而實現相關自動填寫驗證碼的功能。當我們完成所需要的功能時,我們要撤銷觀察,解除注冊,被觀察者從容器中將觀察者去除。觀察者被撤銷后不再收到短信的內容變化通知。


觀察特定Uri的步驟如下

1.創建我們特定的 ContentObserver 派生類,必須重載父類構造方法,必須重載 onChange() 方法去處理回調后的功能實現。

2.利用 context.getContentResolover() 獲得 ContentResolove 對象,接著調用 registerContentObserver() 方法去注冊內容觀察者。

3.由于 ContentObserver 的生命周期不同步于 Activity 和 Service 等,因此,在不需要時,需要手動的調用 unregisterContentObserver() 去取消注冊。


短信的Uri共有一下幾種:

content://sms/inbox? ? 收件箱

content://sms/sent? ? ? 已發送

content://sms/draft? ? 草稿

content://sms/outbox? ? 發件箱? (正在發送的信息)

content://sms/failed? ? 發送失敗

content://sms/queued? ? 待發送列表? (比如開啟飛行模式后,該短信就在待發送列表里)

當然不要忘記添加讀取短信的權限:

uses-permission android:name="android.permission.READ_SMS" />


源碼:點擊下載

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,983評論 6 537
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,772評論 3 422
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,947評論 0 381
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,201評論 1 315
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,960評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,350評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,406評論 3 444
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,549評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,104評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,914評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,089評論 1 371
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,647評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,340評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,753評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,007評論 1 289
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,834評論 3 395
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,106評論 2 375

推薦閱讀更多精彩內容