android傳送簡訊驗證碼並自動擷取驗證碼填充文字框

來源:互聯網
上載者:User

標籤:man   void   tin   rmi   登入管理   沒有   系統   取數   第三方庫   

android註冊傳送簡訊驗證碼並自動擷取簡訊,截取數字驗證碼填充文字框。

 

一.接入簡訊平台

首先需要選擇簡訊平台接入,這裡使用的是榛子云簡訊平台(http://smsow.zhenzikj.com),  

兩分鐘申請測試帳號,贈送了100條測試簡訊。

android使用java的jar包即可開發

 

jar下載: http://smsow.zhenzikj.com/doc/sdk.html

API文檔: http://smsow.zhenzikj.com/doc/java_sdk_doc.html

 

使用測試帳號登入管理後台擷取appId、appSecret, 地址: http://sms.zhenzikj.com/zhenzisms_user

 

在"我的應用程式"->"詳情"中開啟:

1.安裝

下載後的SDK只包含一個jar檔案,並且不依賴任何其他jar包或檔案,直接匯入到工程中即可使用。

2.用法

使用事先申請的AppId、AppSecret初始化ZhenziSmsClient:

 

ZhenziSmsClient client = new ZhenziSmsClient(appId, appSecret);
AppId、AppSecret是簡訊平台分配的

 

1)傳送簡訊

 

String result = client.send("15811111111", "您的驗證碼為4534,有效時間為5分鐘");

send方法用於單條傳送簡訊

參數1:接收者手機號碼,參數2:簡訊內容

返回結果是json格式的字串, code: 發送狀態,0為成功。非0為發送失敗,可從data中查看錯誤資訊

{    "code":0,    "data":"發送成功"}

 

二. 自動擷取驗證碼

大致思路需要做以下幾步:
  1. 擷取簡訊內容

  2. 判斷簡訊中是否含有驗證碼,如果有則提取出來,如果沒有就告知使用者沒有匹配出簡訊驗證碼

  3. 將匹配出的簡訊驗證碼填充到文字框中

  4.  

開始製作

1.)申請簡訊許可權

<uses-permission android:name="android.permission.RECEIVE_SMS" /> <!-- 接收簡訊許可權 --><uses-permission android:name="android.permission.READ_SMS" />    <!-- 讀取簡訊許可權 -->

 

注意!!! 
由於Google在Android6.0引入了運行時許可權,使得只要API版本大於23的都需要進行許可權的申請,在這裡推薦使用一個非常簡單快速的第三方庫來進行運行時許可權的申請,Android 6.0運行時許可權第三方庫的使用—–RxPermissions

 

2.)註冊簡訊接收者

我們知道,每當系統接收到一條簡訊便會發出一條廣播, 

為此,我們首先需要做的就是配置一個廣播接收者來響應這條廣播

AndroidManifest.xml檔案中配置簡訊接受者:

<receiver android:name=".SMSReceiver">      <intent-filter android:priority="1000">           <action android:name="android.provider.Telephony.SMS_RECEIVED" />      </intent-filter></receiver>

 

注意設定此廣播接收者的層級為最高(1000)

 

SMSReceiver.java

public class SMSReceiver extends BroadcastReceiver {    private static final String TAG = "SMSReceiver";    @Override    public void onReceive(Context context, Intent intent) {        //進行擷取簡訊的操作        getMsg(context, intent);    }}



3.)接下來進行簡訊內容的擷取

private void getMsg(Context context, Intent intent) {        //pdus簡訊單位pdu        //解析簡訊內容        Object[] pdus = (Object[]) intent.getExtras().get("pdus");        assert pdus != null;        for (Object pdu : pdus) {            //封裝簡訊參數的對象            SmsMessage sms = SmsMessage.createFromPdu((byte[]) pdu);            String number = sms.getOriginatingAddress();            String body = sms.getMessageBody();            //寫自己的處理邏輯            //擷取簡訊驗證碼            getCode(context, body);        }    }

 

通過SmsMessage對象可以得到簡訊的發送號碼,簡訊內容及相關資訊。

匹配出驗證碼並複製到剪貼簿

這裡我們就把驗證碼放到剪下板了,當然你也可以直接把它填充到文字框中

private void getCode(Context context, String body) {        //擷取剪貼簿管理器:        ClipboardManager cm = (ClipboardManager) context.getSystemService(Context.CLIPBOARD_SERVICE);        Pattern pattern1 = Pattern.compile("(\\d{6})");//提取六位元字        Matcher matcher1 = pattern1.matcher(body);//進行匹配        Pattern pattern2 = Pattern.compile("(\\d{4})");//提取四位元字        Matcher matcher2 = pattern2.matcher(body);//進行匹配        if (matcher1.find()) {//匹配成功            String code = matcher1.group(0);            // 建立一般字元型ClipData            ClipData mClipData = ClipData.newPlainText("Label", code);            // 將ClipData內容放到系統剪貼簿裡。            cm.setPrimaryClip(mClipData);            Toast.makeText(context, "驗證碼複製成功", Toast.LENGTH_SHORT).show();            Log.d(TAG, "onReceive: " + code);        } else if (matcher2.find()) {            String code = matcher2.group(0);            // 建立一般字元型ClipData            ClipData mClipData = ClipData.newPlainText("Label", code);            // 將ClipData內容放到系統剪貼簿裡。            cm.setPrimaryClip(mClipData);            Toast.makeText(context, "驗證碼複製成功", Toast.LENGTH_SHORT).show();            Log.d(TAG, "onReceive: " + code);        } else {            Toast.makeText(context, "未檢測到驗證碼", Toast.LENGTH_SHORT).show();            Log.d(TAG, "onReceive: " + "未檢測到驗證碼");        }    }

在這裡通過Regex匹配出簡訊內容中的驗證碼,因為驗證碼大多數為4位或者6位,所以在這裡為了簡化就直接進行了4位驗證碼和6位驗證碼的判斷 

 

ok,大功告成.

 

 

android傳送簡訊驗證碼並自動擷取驗證碼填充文字框

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.