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
- Android移动端短信验证码的实现
- android 短信验证码的实现
- 集成速达移动106短信接口的短信验证码实现
- 短信验证码的实现
- Android实现获取短信验证码的功能以及自定义GUI短信验证
- android获取短信验证码并自动填写的实现
- Android短信验证码自动填写的实现
- Android如何实现获取短信验证码的功能
- Android短信验证码自动填写功能的实现
- Android实现获取短信验证码的功能(二)
- Android如何实现获取短信验证码的功能
- Android短信验证码自动填写功能的实现
- Android 短信验证的再次实现
- Android中短信验证的功能实现
- android短信接收器的实现,可以实现自动填写短信验证码功能
- Android实现自动填充短信验证码
- Android移动自动化中短信验证码解决方案
- android--监听短信实现短信验证码自动填充
- NavigationItem.leftBarButtonItem 返回事件捕获
- 简单的表达式求值
- 15问答为专业测试人员揭开“精准测试”的面纱
- 常见错误之java.lang.IllegalStateException: The application’s PagerAdapter changed the adapter’s cont。。。
- 系统导航栏背景、文字、按钮的设置
- Android移动端短信验证码的实现
- Rational Rose Enterprise Edition 2003 安装破解步骤
- JavaScript学习笔记3-附录(Java的各类型数据在内存中分配情况详解)
- 读取excel中的表格到datatable
- linux module加载
- Git的使用二(第一次提交修改)仅限Mac亲测
- 600万密码泄露之后,我们该如何保护自己的密码?
- [leetcode] 273.Integer to English Words
- php header函数