前言
創(chuàng)新互聯是一家集網站建設,民樂企業(yè)網站建設,民樂品牌網站建設,網站定制,民樂網站建設報價,網絡營銷,網絡優(yōu)化,民樂網站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強企業(yè)競爭力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯網需求。同時我們時刻保持專業(yè)、時尚、前沿,時刻以成就客戶成長自我,堅持不斷學習、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實用型網站。
短信驗證碼獲取并自動填寫現在已經成為一個人性化App的標配了,這篇文章將實現一個短信驗證碼獲取并自動填寫的demo。其實就是讀取指定號碼的短信并提取出驗證碼,然后賦值給EditText顯示。
demo效果圖:
讀取短信
Android系統(tǒng)在接受到一條短信的時候會發(fā)出一條Action為android.provider.Telephony.SMS_RECEIVED的有序廣播,因此我們讀取短信的驗證碼只需要監(jiān)聽這個廣播然后提取出短信中的驗證碼即可,如:
/**
* Created by 程龍 on 2018/9/27.
*/
public class SMSBroadcastReceiver extends BroadcastReceiver {
private static final String TAG = "SMSBroadcastReceiver";
private OnReceiveSMSListener mOnReceiveSMSListener;
public static final String SMS_RECEIVED_ACTION = "android.provider.Telephony.SMS_RECEIVED";
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(SMS_RECEIVED_ACTION)) {
Object[] pdus = (Object[]) intent.getExtras().get("pdus");
for(Object pdu:pdus) {
SmsMessage smsMessage = SmsMessage.createFromPdu((byte [])pdu);
// 短信號碼
String sender = smsMessage.getDisplayOriginatingAddress();
Log.d(TAG,sender+"");
//短信內容
String content = smsMessage.getDisplayMessageBody();
// 篩選
if ("短信發(fā)送方號碼".equals(sender) && mOnReceiveSMSListener!= null) {
Pattern pattern = Pattern.compile("\\d+");
Matcher matcher = pattern.matcher(content);
if(matcher.find()) {
mOnReceiveSMSListener.onReceived(matcher.group());
}
abortBroadcast();
}
}
}
}
/**
* 回調接口
*/
public interface OnReceiveSMSListener {
void onReceived(String message);
}
public void setOnReceiveSMSListener(OnReceiveSMSListener onReceiveSMSListener) {
mOnReceiveSMSListener = onReceiveSMSListener;
}
}
代碼注釋比較清楚,通過SmsMessage對象可以得到短信的發(fā)送號碼,短信內容及相關信息。當短信號碼為你要讀取的短信發(fā)送方號碼時用正則表達式提取出短信內容的驗證碼,然后通過調用監(jiān)聽器的回調方法更新相應的UI。這里只需將短信驗證發(fā)送方號碼替換成相應的號碼即可,如“106903561008710”為騰訊云注冊發(fā)送的短信號碼。
通常,我們只會在注冊或登錄頁面讀取短信驗證碼,所以,我們采用動態(tài)注冊廣播的方式注冊這個廣播,如:
// 注冊廣播
IntentFilter intentFilter = new IntentFilter(SMSBroadcastReceiver.SMS_RECEIVED_ACTION);
// 設置優(yōu)先級
intentFilter.setPriority(Integer.MAX_VALUE);
registerReceiver(mSMSBroadcastReceiver,intentFilter);
取消注冊
@Override
protected void onDestroy() {
super.onDestroy();
unregisterReceiver(mSMSBroadcastReceiver);
}
MainActivity.java的代碼為:
public class MainActivity extends AppCompatActivity implements SMSBroadcastReceiver.OnReceiveSMSListener {
private SMSBroadcastReceiver mSMSBroadcastReceiver = new SMSBroadcastReceiver();
private EditText mEt_code;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mEt_code = (EditText) findViewById(R.id.et_code);
mSMSBroadcastReceiver.setOnReceiveSMSListener(this);
// 注冊廣播
IntentFilter intentFilter = new IntentFilter(SMSBroadcastReceiver.SMS_RECEIVED_ACTION);
// 設置優(yōu)先級
intentFilter.setPriority(Integer.MAX_VALUE);
registerReceiver(mSMSBroadcastReceiver,intentFilter);
}
@Override
public void onReceived(String message) {
mEt_code.setText(message+"");
}
@Override
protected void onDestroy() {
super.onDestroy();
unregisterReceiver(mSMSBroadcastReceiver);
}
}
這個demo的代碼實現比較簡單,就是監(jiān)聽廣播,讀取收到的短信,然后過濾篩選出我們要的驗證碼短信,再用正則表達式提取到驗證碼設置給EditText顯示即可。大家下載或者自己編寫這個demo并更改發(fā)送方短信號碼運行,然后可以找個注冊網址或是模擬驗證碼短信進行測試。
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持創(chuàng)新互聯。
網站欄目:Android實現自動填充短信驗證碼功能
網址分享:http://m.rwnh.cn/article0/ippcoo.html
成都網站建設公司_創(chuàng)新互聯,為您提供手機網站建設、網站改版、軟件開發(fā)、定制網站、搜索引擎優(yōu)化、網站維護
聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯