Android移动端短信验证码的实现

来源:互联网 发布:淘宝买家秀搞笑 编辑:程序博客网 时间:2024/04/28 17:28

实现的效果是,点击获取验证码开始倒计时60秒,请求验证码成功则发短信到某手机号,若失败则显示重新获取

第一步,在mob中注册项目获取到开发所需的APPKEY和APPSECRET,这一步不赘述

第二步,下载mob上的SMSSDK包,将解压出来的library包作为工程的依赖包导入,同不多说。

第三步,初始化短信SDK,通过获取到的手机号初始化短信SDK

private boolean ready;private Handler handler = new Handler(this);private SMSReceiver smsReceiver;
smsReceiver = new SMSReceiver(this);IntentFilter filter = new IntentFilter();filter.addAction("android.provider.Telephony.SMS_RECEIVED");registerReceiver(smsReceiver, filter);


private void initSDK(String num) {// 初始化短信SDKSMSSDK.initSDK(this, Constants.SMS_APPKEY, Constants.SMS_APPSECRET);SMSSDK.getVerificationCode("86",num,this);EventHandler eventHandler = new EventHandler() {public void afterEvent(int event, int result, Object data) {super.afterEvent(event, result, data);Log.i("info", "----result:----"+result+"----initSDK----event:----"+event+"--------");Message msg = new Message();msg.arg1 = event;msg.arg2 = result;msg.obj = data;handler.sendMessage(msg);}};// 注册回调监听接口SMSSDK.registerEventHandler(eventHandler);ready = true;}
第四步,定义一个计时器,来处理倒计时情况,并开启一个线程进行处理

        private Timer timer;private TimerTask timerTask;private String txtTimeStr = "秒后重新获取";private String txtDefaultStr = "获取验证码";private int time = 60000;private Handler timeHandler = new Handler(){@Overridepublic void handleMessage(Message msg) {super.handleMessage(msg);getCode.setText(time/1000 + txtTimeStr);time-=1000;if (time<0) {getCode.setEnabled(true);getCode.setText(txtDefaultStr);if (ready) {SMSSDK.unregisterAllEventHandler();ready = false;}}}};

private void initTimer(){timer = new Timer();timerTask = new TimerTask() {@Overridepublic void run() {timeHandler.sendEmptyMessage(0x01);}};} private void clearTimer() {          if (timerTask != null) {          timerTask.cancel();          timerTask = null;          }          if (timer != null)          timer.cancel();          timer = null;      }  

最后,总结一下整个代码逻辑

public class RegisterActivity extends Activity implements Callback,OnSendMessageHandler,VerifyCodeReadListener{private boolean ready;private Handler handler = new Handler(this);private SMSReceiver smsReceiver;private Timer timer;private TimerTask timerTask;private String txtTimeStr = "秒后重新获取";private String txtDefaultStr = "获取验证码";private int time = 60000;private Handler timeHandler = new Handler(){@Overridepublic void handleMessage(Message msg) {super.handleMessage(msg);getCode.setText(time/1000 + txtTimeStr);time-=1000;if (time<0) {getCode.setEnabled(true);getCode.setText(txtDefaultStr);if (ready) {SMSSDK.unregisterAllEventHandler();ready = false;}}}};@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_test);smsReceiver = new SMSReceiver(this);IntentFilter filter = new IntentFilter();filter.addAction("android.provider.Telephony.SMS_RECEIVED");registerReceiver(smsReceiver, filter);}@OnClick(R.id.getCode)public void getCode(View view){//注册,获取输入的手机号String tel = number.getText().toString();if (!tel.isEmpty()) {initSDK(tel);}else {Toast.makeText(getApplicationContext(), "请输入手机号", 1).show();}}private void initSDK(String num) {// 初始化短信SDKSMSSDK.initSDK(this, Constants.SMS_APPKEY, Constants.SMS_APPSECRET);SMSSDK.getVerificationCode("86",num,this);EventHandler eventHandler = new EventHandler() {public void afterEvent(int event, int result, Object data) {super.afterEvent(event, result, data);Log.i("info", "----result:----"+result+"----initSDK----event:----"+event+"--------");Message msg = new Message();msg.arg1 = event;msg.arg2 = result;msg.obj = data;handler.sendMessage(msg);}};// 注册回调监听接口SMSSDK.registerEventHandler(eventHandler);ready = true;}@OnClick(R.id.back_home)public void back(View view){Intent intent=new Intent();finish();overridePendingTransition(R.anim.act_rightin, R.anim.act_rightout);}@Overrideprotected void onDestroy() {super.onDestroy();if (ready) {SMSSDK.unregisterAllEventHandler();ready = false;}unregisterReceiver(smsReceiver);clearTimer();}@Overridepublic boolean onSendMessage(String contry, String phone) {Log.i("info", "----------------------------");Log.i("info", "----------phone---------"+phone+"---------");return false;}@Overridepublic void onReadVerifyCode(String verifyCode) {//this.verifyCode = verifyCode;//this.code.setText(verifyCode);this.getCode.setText(txtDefaultStr);this.getCode.setEnabled(true);clearTimer();}@Overridepublic boolean handleMessage(Message msg) {int event = msg.arg1;int result = msg.arg2;Object data = msg.obj;//回调完成if (result == SMSSDK.RESULT_COMPLETE) {           if (event == SMSSDK.EVENT_GET_VERIFICATION_CODE){//获取验证码成功                      }       }else{                 Toast.makeText(getApplicationContext(), "请求验证码失败,请稍后再试!", 1).show();                   ((Throwable)data).printStackTrace();             this.getCode.setText(txtDefaultStr);    this.getCode.setEnabled(true);            clearTimer();       }   return false;}private void initTimer(){timer = new Timer();timerTask = new TimerTask() {@Overridepublic void run() {timeHandler.sendEmptyMessage(0x01);}};} private void clearTimer() {          if (timerTask != null) {          timerTask.cancel();          timerTask = null;          }          if (timer != null)          timer.cancel();          timer = null;   }  }



0 0
原创粉丝点击