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