1. 配置完以后,在注册activity的onCreate()方法中先进行eventHandler的注册。
个人理解,eventHandler就是对短信验证进行监听,在进行相应的操作后,实现相应的UI更新和回调操作。
eventHandler中可以重写四个回调方法。
其中onRegister在回调对象注册的时候被触发。beforeEvent在操作执行前被触发,其参数event表示操作的类型,data是从外部传入的数据。afterEvent在操作结束时被触发,同样具备event和data参数,但是data是事件操作结果,其具体取值根据参数result而定。
一般情况是用afterEvent实现回调。
result表示操作结果,会返回两种值:
SMSSDK.RESULT_COMPLETE:表示操作成功。
SMSSDK.RESULT_ERROR:表示操作失败。
event表示操作类型,会返回两个值:
EVENT_GET_VERIFICATION_CODE:表示发送成功。
EVENT_SUBMIT_VERIFICATION_CODE:表示验证成功。(在开发平台 “短信设置” 里面设置取消智能验证,才会发送短信,否则不会发送短信)
eventHandler=newEventHandler() {
@Override
public void afterEvent(intevent,intresult, Object data) {
/**
* 短信验证后,返回主线程进行UI操作
*/
Message message =newMessage();
message.what=SMSSDK_TEST_RESPONSE;
message.arg1= event;
message.arg2= result;
message.obj= data;
handle.sendMessage(message);
}
};
//注册eventHandler
SMSSDK.registerEventHandler(eventHandler);
2.发送短信:
SMSSDK.getVerificationCode("86",etRegisterUserName
.getText().toString());
参数1: 区号,中国是“86”
参数2:11位手机号。
3.验证短信:
SMSSDK.submitVerificationCode("86",mPhoneString,
etIdentifyCode.getText().toString());
参数1: 区号
参数2: 手机号
参数3: 验证码
4.对于发送以后和验证后的响应操作
1.由于UI操作要在主线程中进行,所以对于eventHandler在子线程中的afterEvent方法,应该使用Handler返回主线程进行相应的操作。
2.在发送验证码后发送handler来让按钮变成记录秒数状态(即多少秒后可以重新发送),用线程实现
3.秒数结束,还原按钮状态
4.由于要和自己设计的服务器通信,所以在验证码验证成功后,向自己服务器发起请求,判断是否能够注册
//用于更新UI的句柄
privateHandlerhandle=newHandler(){
@Override
public voidhandleMessage(Message msg) {
switch(msg.what){
caseRESEND_MESSAGE_TIME_CHANGE_HANDLE:
//更新短信多少秒后可以发送
btnGetIdentifyCode.setText(messageSendTime+"s后可以重新发送");
btnGetIdentifyCode.setBackground(getResources().getDrawable(R.color.darkgray));
break;
caseRESEND_MESSAGE_HANDLE:
//按钮变为可点击
btnGetIdentifyCode.setText("获取验证码");
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;
//如果发送成功
if(result == SMSSDK.RESULT_COMPLETE){
Log.d("test_message","3");
//验证成功,向服务器发送请求验证是否已注册
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,"注册异常",Toast.LENGTH_LONG).show();
}
@Override
public voidonResponse(String response,intid) {
if("注册成功".equals(response)){
//如果服务器验证成功,跳转到主界面
Toast.makeText(RegisterActivity.this,"注册成功",
Toast.LENGTH_SHORT).show();
Intent intent =newIntent(RegisterActivity.this,MainActivity.class);
Bundle bundle =newBundle();
//传入用户名
bundle.putString("userName",mPhoneString);
startActivity(intent);
finish();
}else if("已经注册".equals(response)){
//提示已经注册
Toast.makeText(RegisterActivity.this,"注册失败,该手机号已经注册",
Toast.LENGTH_SHORT).show();
}else{
Toast.makeText(RegisterActivity.this,"注册失败!",
Toast.LENGTH_SHORT).show();
}
}
});
}else if(event == SMSSDK.EVENT_GET_VERIFICATION_CODE){
//验证码已经从服务器发出
Toast.makeText(RegisterActivity.this,"验证码已发出,请注意查收", Toast.LENGTH_SHORT).show();
}else{
//验证码输入错误
Toast.makeText(RegisterActivity.this,"验证码输入错误!", Toast.LENGTH_SHORT).show();
}
}else{
//发送失败
Log.d("send_message","3");
Toast.makeText(RegisterActivity.this,"短信发送失败!",Toast.LENGTH_SHORT).show();
}
break;
default:
break;
}
}
};
网友评论