1. 配置完以后,在注冊(cè)activity的onCreate()方法中先進(jìn)行eventHandler的注冊(cè)餐禁。
個(gè)人理解诵肛,eventHandler就是對(duì)短信驗(yàn)證進(jìn)行監(jiān)聽(tīng),在進(jìn)行相應(yīng)的操作后箱蟆,實(shí)現(xiàn)相應(yīng)的UI更新和回調(diào)操作沟绪。
eventHandler中可以重寫(xiě)四個(gè)回調(diào)方法。
其中onRegister在回調(diào)對(duì)象注冊(cè)的時(shí)候被觸發(fā)空猜。beforeEvent在操作執(zhí)行前被觸發(fā)绽慈,其參數(shù)event表示操作的類(lèi)型,data是從外部傳入的數(shù)據(jù)辈毯。afterEvent在操作結(jié)束時(shí)被觸發(fā)坝疼,同樣具備event和data參數(shù),但是data是事件操作結(jié)果谆沃,其具體取值根據(jù)參數(shù)result而定裙士。
一般情況是用afterEvent實(shí)現(xiàn)回調(diào)。
result表示操作結(jié)果管毙,會(huì)返回兩種值:
SMSSDK.RESULT_COMPLETE:表示操作成功腿椎。
SMSSDK.RESULT_ERROR:表示操作失敗。
event表示操作類(lèi)型夭咬,會(huì)返回兩個(gè)值:
EVENT_GET_VERIFICATION_CODE:表示發(fā)送成功啃炸。
EVENT_SUBMIT_VERIFICATION_CODE:表示驗(yàn)證成功。(在開(kāi)發(fā)平臺(tái) “短信設(shè)置” 里面設(shè)置取消智能驗(yàn)證卓舵,才會(huì)發(fā)送短信南用,否則不會(huì)發(fā)送短信)
eventHandler=newEventHandler() {
@Override
public void? afterEvent(intevent,intresult, Object data) {
/**
* 短信驗(yàn)證后,返回主線程進(jìn)行UI操作
*/
????????????????Message message =newMessage();
????????????????message.what=SMSSDK_TEST_RESPONSE;
????????????????message.arg1= event;
????????????????message.arg2= result;
????????????????message.obj= data;
????????????????handle.sendMessage(message);
????}
};
//注冊(cè)eventHandler
SMSSDK.registerEventHandler(eventHandler);
2.發(fā)送短信:
SMSSDK.getVerificationCode("86",etRegisterUserName
.getText().toString());
參數(shù)1: 區(qū)號(hào)掏湾,中國(guó)是“86”
參數(shù)2:11位手機(jī)號(hào)裹虫。
3.驗(yàn)證短信:
SMSSDK.submitVerificationCode("86",mPhoneString,
etIdentifyCode.getText().toString());
參數(shù)1: 區(qū)號(hào)
參數(shù)2: 手機(jī)號(hào)
參數(shù)3: 驗(yàn)證碼
4.對(duì)于發(fā)送以后和驗(yàn)證后的響應(yīng)操作
? ? 1.由于UI操作要在主線程中進(jìn)行,所以對(duì)于eventHandler在子線程中的afterEvent方法融击,應(yīng)該使用Handler返回主線程進(jìn)行相應(yīng)的操作筑公。
? ? 2.在發(fā)送驗(yàn)證碼后發(fā)送handler來(lái)讓按鈕變成記錄秒數(shù)狀態(tài)(即多少秒后可以重新發(fā)送),用線程實(shí)現(xiàn)
? ? 3.秒數(shù)結(jié)束尊浪,還原按鈕狀態(tài)
? ? 4.由于要和自己設(shè)計(jì)的服務(wù)器通信匣屡,所以在驗(yàn)證碼驗(yàn)證成功后封救,向自己服務(wù)器發(fā)起請(qǐng)求,判斷是否能夠注冊(cè)
//用于更新UI的句柄
privateHandlerhandle=newHandler(){
@Override
public voidhandleMessage(Message msg) {
switch(msg.what){
caseRESEND_MESSAGE_TIME_CHANGE_HANDLE:
//更新短信多少秒后可以發(fā)送
btnGetIdentifyCode.setText(messageSendTime+"s后可以重新發(fā)送");
btnGetIdentifyCode.setBackground(getResources().getDrawable(R.color.darkgray));
break;
caseRESEND_MESSAGE_HANDLE:
//按鈕變?yōu)榭牲c(diǎn)擊
btnGetIdentifyCode.setText("獲取驗(yàn)證碼");
btnGetIdentifyCode.setClickable(true);
btnGetIdentifyCode.setBackground(getResources().getDrawable(R.drawable.bt_register));
messageSendTime=60;
break;
caseSMSSDK_TEST_RESPONSE:
intevent = msg.arg1;
intresult = msg.arg2;
Object data = msg.obj;
//如果發(fā)送成功
if(result == SMSSDK.RESULT_COMPLETE){
Log.d("test_message","3");
//驗(yàn)證成功捣作,向服務(wù)器發(fā)送請(qǐng)求驗(yàn)證是否已注冊(cè)
if(event == SMSSDK.EVENT_SUBMIT_VERIFICATION_CODE){
Log.d("test_message","4");
OkHttpUtils
.post()
.url(NET_URL_HEADER+"UserServlet")
.addParams("userName",mPhoneString)
.addParams("password",etRegisterPassword.getText().toString())
.addParams("age","0")
.addParams("phoneNumber",mPhoneString)
.addParams("method","addUser")
.build()
.execute(newStringCallback() {
@Override
public voidonError(Call call, Exception e,intid) {
e.printStackTrace();
Toast.makeText(RegisterActivity.this,"注冊(cè)異常",Toast.LENGTH_LONG).show();
}
@Override
public voidonResponse(String response,intid) {
if("注冊(cè)成功".equals(response)){
//如果服務(wù)器驗(yàn)證成功誉结,跳轉(zhuǎn)到主界面
Toast.makeText(RegisterActivity.this,"注冊(cè)成功",
Toast.LENGTH_SHORT).show();
Intent intent =newIntent(RegisterActivity.this,MainActivity.class);
Bundle bundle =newBundle();
//傳入用戶名
bundle.putString("userName",mPhoneString);
startActivity(intent);
finish();
}else if("已經(jīng)注冊(cè)".equals(response)){
//提示已經(jīng)注冊(cè)
Toast.makeText(RegisterActivity.this,"注冊(cè)失敗,該手機(jī)號(hào)已經(jīng)注冊(cè)",
Toast.LENGTH_SHORT).show();
}else{
Toast.makeText(RegisterActivity.this,"注冊(cè)失敗!",
Toast.LENGTH_SHORT).show();
}
}
});
}else if(event == SMSSDK.EVENT_GET_VERIFICATION_CODE){
//驗(yàn)證碼已經(jīng)從服務(wù)器發(fā)出
Toast.makeText(RegisterActivity.this,"驗(yàn)證碼已發(fā)出,請(qǐng)注意查收", Toast.LENGTH_SHORT).show();
}else{
//驗(yàn)證碼輸入錯(cuò)誤
Toast.makeText(RegisterActivity.this,"驗(yàn)證碼輸入錯(cuò)誤券躁!", Toast.LENGTH_SHORT).show();
}
}else{
//發(fā)送失敗
Log.d("send_message","3");
Toast.makeText(RegisterActivity.this,"短信發(fā)送失敵涂印!",Toast.LENGTH_SHORT).show();
}
break;
default:
break;
}
}
};