Android開發之屬於你的簡訊驗證碼(二),android驗證碼
君子欲訥於言而敏於行.—《論語》
最近身體有點不適,才注意到身體真的是最重要的,以後不管我們有多忙,一定要按時休息,堅持跑步,鍛煉身體,做些頸椎的操等等,不要讓我們掙的錢拿來看病,大家一起來堅持啊,不要讓年輕蒙蔽了我們的雙眼。
在Android開發之屬於你的簡訊驗證碼(一)我們主要講了彙總資料,以及使用彙總資料開發簡訊驗證碼的準備工作及配置,這一篇我們將帶來完整的功能的實現,以及介面UI的實現。如有謬誤歡迎批評指正,如有疑問歡迎留言,謝謝
首先我們來看下介面第一個介面
我們在這個介面輸入手機號,及簡訊的目的地,點擊下一步後會彈出一個Dialog
點擊確定後會調用會調用彙總資料給我們提供的sendCaptcha方法,這個方法我們在第一篇文章中已經用過
/*點擊確定後調用sendCaptcha方法向伺服器提交手機號碼 code(返回碼): 伺服器:0 成功,1 錯誤; 本 地:-2 本網異常,-3 伺服器網路異常,-4 解析錯誤,-5 初始化異常。 reason(返回資訊):成功或錯誤的原因。 result(返回結果):JSON格式,錯誤或者無傳回值時為空白。 */ smsCaptcha.sendCaptcha(phone,new ResultCallBack() {@Overridepublic void onResult(int code, String reason, String result) {closeDialog();if(code==0){afterCapterRequested();} }});
當返回的code==0時說明簡訊驗證碼發送成功,我們需要進行介面的跳轉,代碼如下
//當code=0成功時,跳轉到輸入驗證碼的Activityprivate void afterCapterRequested() {String phone=etPhoneNumber.getText().toString().trim().replaceAll("\\ss*", "");String code=tvCountryNumber.getText().toString().trim();String fomatedPhone=code+" "+splitPhoneNum(phone);Toast.makeText(this,"成功",Toast.LENGTH_SHORT).show();Intent intent=new Intent();intent.setClass(RegistActivity.this,CaptchaActivity.class);//把手機號碼和格式化的手機號碼傳過去intent.putExtra("formatedPhone",fomatedPhone);intent.putExtra("phone",phone);startActivity(intent);}//格式化手機號碼的方法,格式化後的形式:+86 131 4118 2951private String splitPhoneNum(String phone) {StringBuilder builder=new StringBuilder(phone);builder.reverse();for(int i=4,len=builder.length();i<len;i+=5){builder.insert(i,' ');}builder.reverse();return builder.toString();}跳轉的介面的布局如下在這個介面我們需要輸入簡訊驗證碼,輸入簡訊驗證碼後點擊下一步時會調用彙總資料的commitCaptcha這個方法,比對資料的方法,
smsCaptcha.commitCaptcha(phoneNumbber,verfiyCode,new ResultCallBack() {/* code:返回碼: 伺服器: 0 成功; 1 錯誤; 本地: -2 本網異常; -3 伺服器網路異常;-4 解析錯誤;-5初始化異常 reason:返回資訊 成功或錯誤原因. result:返回結果,JSON格式.錯誤或者無傳回值時為空白.*/ @Overridepublic void onResult(int code,String reason,String result) {if(code==0){Log.i(TAG,code+"");Log.i(TAG,reason);Log.i(TAG,result);Toast.makeText(CaptchaActivity.this,"您輸入的驗證碼正確",Toast.LENGTH_SHORT).show();CaptchaActivity.this.finish();}else{Toast.makeText(CaptchaActivity.this,"您輸入的驗證碼不正確",Toast.LENGTH_SHORT).show();}}});
我們可以看到這個方法所需的參數是①手機號碼②手機驗證碼,我們調用此方法後彙總資料的伺服器會進行判斷,此驗證碼是否是剛才發送給這個手機號的驗證碼,驗證後給我返回結果,我們根據返回的結果就可以進行相應的操作。在上面的介面中我們發現有一個倒計時的功能,我在這裡說一下思路,當然這個倒計時方法有很多。在這個Demo中倒計時是放在一個tvCountDown的一個textView中,首先
//R.string.receiveMessgeCountDown的內容為:<Data>接收簡訊大約需要<font color=#209526>%s</font>秒</Data>//這句話就是用time把 html裡的%號替換掉String unReceive=getResources().getString(R.string. receiveMessgeCountDown,time );//把用html格式化的字串設定給倒計時的文字框tvCountDown.setText(Html.fromHtml(unReceive));
這樣我們可以把html格式化的文本填充到tvCountDown中。接下來就是倒計時的方法了
private final int RETRY_INTERVAL =60;private int time=RETRY_INTERVAL; //倒計時方法 private void countDown() { new Thread( new Runnable() { @Override public void run() { while( time-->0){ //減一後的time把<Data>接收簡訊大約需要<font color=#209526>%s</font>秒</Data>中的%號替換掉 String countDownTime=CaptchaActivity.this .getResources().getString(R.string. receiveMessgeCountDown,time ); //在主線程上更新tvCountDown upDateTvCountDown(countDownTime); try { Thread. sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } String countDownTime=CaptchaActivity.this .getResources().getString(R.string. unreceiveMessage, time); upDateTvCountDown(countDownTime); time = RETRY_INTERVAL; } }).start();}//在主線程上更新tvCountDownprivate void upDateTvCountDown(final String countDownTime) { runOnUiThread( new Runnable() { @Override public void run() { tvCountDown.setText(Html. fromHtml(countDownTime)); tvCountDown.setEnabled( false); } }); }總結:其實使用彙總資料的簡訊驗證碼功能,主要就兩個方法,一個是擷取驗證碼的方法sendCaptcha,一個是提交驗證碼進行驗證的方法commitCaptcha。我們在此基礎上,可以根據需求對介面變更。以上就是對簡訊驗證碼的主要邏輯進行的介紹。
好了,關於使用彙總資料實現手機驗證的知識點就討論完了,歡迎大家留言。
簡訊驗證碼完整項目源碼,猛戳這裡