Android實(shí)現(xiàn)短信驗(yàn)證碼自動(dòng)填寫功能
本實(shí)例為大家分享了Android實(shí)現(xiàn)短信驗(yàn)證碼自動(dòng)填寫功能,供大家參考,具體內(nèi)容如下
實(shí)現(xiàn)思路很簡單:
- 1、在需要輸入驗(yàn)證碼的Activity代碼注冊(cè)監(jiān)聽短信的廣播
- 2、攔截短信,獲取其中的驗(yàn)證碼
- 3、回寫到EditText
private SmsReciver smsReciver = new SmsReciver(); /** 收到短信Action **/ String ACTION_SMS_RECIVER = "android.provider.Telephony.SMS_RECEIVED"; /** * 注冊(cè)廣播接受者監(jiān)聽短信驗(yàn)證碼自動(dòng)回寫 可在onCreate()中進(jìn)行注冊(cè); */ private void registSmsReciver() { IntentFilter filter = new IntentFilter(); filter.addAction(ACTION_SMS_RECIVER); // 設(shè)置優(yōu)先級(jí) 不然監(jiān)聽不到短信 filter.setPriority(1000); registerReceiver(smsReciver, filter); } /** * 短信廣播接受者 用戶監(jiān)聽短信,自動(dòng)填寫驗(yàn)證碼 */ private class SmsReciver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Object[] objs = (Object[]) intent.getExtras().get("pdus"); for (Object obj : objs) { yte[] pdu = (byte[]) obj; SmsMessage sms = SmsMessage.createFromPdu(pdu); // 短信的內(nèi)容 String message = sms.getMessageBody(); Log.d("log", "message " + message); // 短息的手機(jī)號(hào),如果你們公司發(fā)送驗(yàn)證碼的號(hào)碼是固定的這里可以進(jìn)行一個(gè)號(hào)碼的校驗(yàn) String from = sms.getOriginatingAddress(); Log.d("log", "from " + from); analysisVerify(message); } } } /** * 解析短信并且回寫 這里解析的是純數(shù)字的短信,如果小伙伴的驗(yàn)證碼包含字母的話,可用正則替換 * * @param message */ private void analysisVerify(String message) { char[] msgs = message.toCharArray(); StringBuffer sb = new StringBuffer(); for (int i = 0; i < msgs.length; i++) { if ('0' <= msgs[i] && msgs[i] <= '9') { sb.append(msgs[i]); } } mEtVerifyCode.setText(sb.toString()); } @Override protected void onDestroy() { super.onDestroy(); // 取消短信廣播注冊(cè) if (smsReciver != null) { unregisterReceiver(smsReciver); smsReciver = null; } }
可以看到代碼邏輯比較簡單,需要注意的有幾點(diǎn)。我們這里用的代碼注冊(cè)廣播,之所以不采取全局廣播的形式原因有兩天,在高版本的api,注冊(cè)全局的短信監(jiān)聽會(huì)失效。而且就業(yè)務(wù)而言,我們監(jiān)聽短信只會(huì)在輸入驗(yàn)證碼的Activity里面才會(huì)用到,采用代碼注冊(cè)的形式,在當(dāng)前Activity銷毀的時(shí)候取消廣播注冊(cè),更符合我們的預(yù)期,提高應(yīng)用的性能。
第二個(gè)需要注意的問題是優(yōu)先級(jí)的問題。
filter.setPriority(1000);
可以看到,我們這里把優(yōu)先級(jí)設(shè)置成了最大。保證我們的應(yīng)用能夠盡可能的接受到短信。注意,我使用的是“盡可能”,也就是說我們不能保證短信自動(dòng)填寫一定能執(zhí)行成功,有個(gè)小伙伴可能會(huì)問,我們不是把優(yōu)先級(jí)設(shè)置成了最高了嗎?
為什么還不能保證了?
原因其實(shí)很簡單,你能把監(jiān)聽短信的優(yōu)先級(jí)設(shè)置成最大,同樣的,其他的應(yīng)用也能把短信監(jiān)聽的優(yōu)先級(jí)設(shè)置成最大。比如說,你的手機(jī)安裝有360安全衛(wèi)士,把你們公司的驗(yàn)證碼視為垃圾短信攔截了,這個(gè)時(shí)候短信攔截就失效了。
以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助。
- Android如何通過手機(jī)獲取驗(yàn)證碼來完成注冊(cè)功能
- Android開發(fā)中通過手機(jī)號(hào)+短信驗(yàn)證碼登錄的實(shí)例代碼
- Android開發(fā)工程中集成mob短信驗(yàn)證碼功能的方法
- Android實(shí)現(xiàn)短信驗(yàn)證碼獲取自動(dòng)填寫功能(詳細(xì)版)
- Android獲取和讀取短信驗(yàn)證碼的實(shí)現(xiàn)方法
- Android實(shí)現(xiàn)自動(dòng)提取短信驗(yàn)證碼功能
- Android獲取短信驗(yàn)證碼的實(shí)現(xiàn)方法
- Android實(shí)現(xiàn)常見的驗(yàn)證碼輸入框?qū)嵗a
- Android自定義控件通用驗(yàn)證碼輸入框的實(shí)現(xiàn)
- Android實(shí)現(xiàn)隨機(jī)生成驗(yàn)證碼
相關(guān)文章
RecyclerView+SnapHelper實(shí)現(xiàn)無限循環(huán)篩選控件
這篇文章主要為大家詳細(xì)介紹了RecyclerView+SnapHelper實(shí)現(xiàn)無限循環(huán)篩選控件,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-10-10android ImageView 的幾點(diǎn)經(jīng)驗(yàn)總結(jié)
本篇文章是對(duì)android中ImageView的使用技巧進(jìn)行了幾點(diǎn)經(jīng)驗(yàn)總結(jié),需要的朋友參考下2013-06-06Android仿淘寶頭條基于TextView實(shí)現(xiàn)上下滾動(dòng)通知效果
這篇文章主要介紹了Android TextView實(shí)現(xiàn)上下滾動(dòng)通知效果,需要的朋友可以參考下2017-03-03Android中實(shí)現(xiàn)WebView和JavaScript的互相調(diào)用詳解
這篇文章主要給大家介紹了關(guān)于Android中實(shí)現(xiàn)WebView和JavaScript的互相調(diào)用的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)各位Android開發(fā)者們具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友下面來一起看看吧。2018-03-03android 震動(dòng)和提示音的實(shí)現(xiàn)代碼
這篇文章主要介紹了android 震動(dòng)和提示音的實(shí)現(xiàn)代碼,代碼簡單易懂,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-12-12Android WebView userAgent 設(shè)置為桌面UA實(shí)例
這篇文章主要介紹了Android WebView userAgent 設(shè)置為桌面UA實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-03-03