Android 短信驗證碼自動填充

一、前言:

這周項目做優化,爲用戶操作更加方便,註冊、忘記密碼、更換手機號、所需要的獲取驗證碼操作,增加 獲取短信驗證碼,然後自動填寫到輸入框中。思路簡單,主要是監聽短信的廣播,然後正則短信中的驗證碼

二、具體代碼:

package com.taikongdan.app.service;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.telephony.SmsMessage;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * Created by merbng on 2016/4/6.
 */
public class SMSReceiver extends BroadcastReceiver {
    public static final String SMS_RECEIVED_ACTION = "android.provider.Telephony.SMS_RECEIVED";
    public static final String TAG = "ImiChatSMSReceiver";

    public interface ISMSListener {
        void onSmsReceiver(String verifyCode);
    }

    private static ISMSListener mSMSListener;

    public SMSReceiver(ISMSListener mSMSListener) {
        this.mSMSListener = mSMSListener;
    }

    @Override
    public void onReceive(Context context, Intent intent) {
        if (intent.getAction().equals(SMS_RECEIVED_ACTION)) {
            SmsMessage[] messages = getMessageFromIntent(intent);
            for (SmsMessage message : messages
                    ) {
            //  在這裏你可以對放鬆的號碼進行判斷,只接受目標號碼的驗證碼
                String msg = message.getDisplayMessageBody();
                Pattern p = Pattern.compile("\\d{6}");//這裏你可以更改數字來指定驗證碼的位數
                Matcher m = p.matcher(msg);
                String verifyCode = null;
                while (m.find()) {
                    verifyCode = m.group();
                    break;
                }
                if (mSMSListener != null) {
                    mSMSListener.onSmsReceiver(verifyCode);
                }

            }

        }
    }

    private SmsMessage[] getMessageFromIntent(Intent intent) {
        Object[] messages = (Object[]) intent.getSerializableExtra("pdus");
        byte[][] pduObjes = new byte[messages.length][];
        for (int i = 0; i < messages.length; i++) {
            pduObjes[i] = ((byte[]) messages[i]);

        }
        byte[][] pdus = new byte[pduObjes.length][];
        int pduCount = pdus.length;
        SmsMessage[] msgs = new SmsMessage[pduCount];
        for (int i = 0; i < pduCount; i++) {
            pdus[i] = pduObjes[i];
            msgs[i] = SmsMessage.createFromPdu(pdus[i]);
        }
        return msgs;
    }
}
在Activity  onCreate中,註冊廣播,
<pre name="code" class="java">    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.rememeberactivity);
        mReceiver = new SMSReceiver(this);
        IntentFilter filter = new IntentFilter();
        filter.addAction("android.provider.Telephony.SMS_RECEIVED");
        registerReceiver(mReceiver, filter);

    }



在界面銷燬的時候 解綁廣播

    @Override
    protected void onDestroy() {
        super.onDestroy();
        unregisterReceiver(mReceiver);
    }



發佈了60 篇原創文章 · 獲贊 23 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章