Android短信验证码(用的Mob短信验证)
程序员文章站
2023-12-12 17:16:22
android短信验证码功能,供大家参考,具体内容如下
1、参考资料
mob网站:
mob在github上的例子:https://github.com/mobcl...
android短信验证码功能,供大家参考,具体内容如下
1、参考资料
mob网站:
mob在github上的例子:https://github.com/mobclub/smssdk-for-android
教程:mob短信验证的具体使用
教程的源代码: http://git.oschina.net/lizhanqi/mobsmsdemo
dialog教程:android dialog对话框
定时器教程:android 实现定时器的四种方式
2、前期准备
(1)mob网站上下载sms对应的sdk,解压出来为图1,打开图1,将其中的文件拷贝到as项目中的libs文件夹下,另外在。
图1
图2
(2)在as项目中的androidmanifest.xml文件中添加图3所需权限,由于sms权限为危险权限,所以还要动态申请,这在下面代码中会有体现。注意权限是写在application外面,不是里面。
图3
(3)如果图4中的targetsdkversion大于22,那么在代码中必须动态申请权限。
图4
(4)在as项目中的图7中的build.gradle文件中添加图5和图6红色框中内容。
图5
图6
图7
(5)在mob网站上申请app key和app secret。
图8
(6)toast
3、代码(没整理,将就看)
package com.gxu.lepao.activity; import android.manifest; import android.app.dialog; import android.content.dialoginterface; import android.content.intent; import android.content.pm.packagemanager; import android.os.bundle; import android.os.countdowntimer; import android.os.handler; import android.os.message; import android.support.v4.app.activitycompat; import android.support.v4.content.contextcompat; import android.support.v7.app.alertdialog; import android.text.textutils; import android.util.log; import android.view.view; import android.widget.button; import android.widget.edittext; import android.widget.textview; import android.widget.toast; import com.gxu.lepao.r; import com.gxu.lepao.model.userinfo; import org.litepal.crud.datasupport;//litepal开源数据库框架 import java.util.list; import cn.smssdk.eventhandler;//mob短信验证码 import cn.smssdk.smssdk;//mob短信验证码 /** * created by ljy on 2017-05-21. * 获取和验证短信验证码界面 */ public class registeractivity extends baseactivity { private edittext phoneedit; private edittext smsedit; private button getsms; private button submitsms; private textview login; private textview reset; private countdowntimer countdowntimer; //倒计时 private int time = 60; //这是中国区号,如果需要其他国家列表,可以使用getsupportedcountries();获得国家区号 public string country = "86"; //appkey private static string appkey = "1e0d15118480d"; // 填写从短信sdk应用后台注册得到的appsecret private static string appsecret = "daa97d794e2436abcae624ac3785d2ef"; //表示是否使用了registereventhandler private boolean ready; @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); log.d("registeractivity","task; id is " + gettaskid()); setcontentview(r.layout.activity_register); // 初始化界面 initview(); //初始化smssdk initsdk(); getsms.setonclicklistener(new view.onclicklistener(){ @override public void onclick(view v) { boolean islogin = false; //判断手机号码是否已注册过 islogin = isregister(); if(!textutils.isempty(phoneedit.gettext().tostring())){ if(!islogin){ //发送短信权限 if(contextcompat.checkselfpermission(registeractivity.this ,manifest.permission.receive_sms) != packagemanager.permission_granted){ //显示申请权限弹窗 showrequestpermission(); }else{ //弹窗确认 alterwarning(); } }else{ toast.maketext(registeractivity.this,"此手机号码已经注册过",toast.length_short).show(); } }else{ toast.maketext(registeractivity.this,"请输入手机号码",toast.length_short).show(); } } }); submitsms.setonclicklistener(new view.onclicklistener(){ @override public void onclick(view v) { string sms = smsedit.gettext().tostring(); string phone = phoneedit.gettext().tostring(); if(!textutils.isempty(sms)){ smssdk.submitverificationcode( country, phone, sms); }else{ toast.maketext(registeractivity.this,"请输入验证码",toast.length_short).show(); } } }); login.setonclicklistener(new view.onclicklistener(){ @override public void onclick(view v) { intent intent = new intent(registeractivity.this,loginactivity.class); startactivity(intent); } }); reset.setonclicklistener(new view.onclicklistener(){ @override public void onclick(view v) { intent intent = new intent(registeractivity.this,resetpwdactivity.class); startactivity(intent); } }); } //申请权限弹窗 private void showrequestpermission(){ //先new出一个监听器,设置好监听 dialoginterface.onclicklistener dialogoncliclistener=new dialoginterface.onclicklistener(){ @override public void onclick(dialoginterface dialog, int which) { switch(which){ case dialog.button_positive: //接收短信权限 activitycompat.requestpermissions(registeractivity.this,new string[]{manifest.permission.receive_sms},1); //发送短信权限 activitycompat.requestpermissions(registeractivity.this,new string[]{manifest.permission.send_sms},2); //弹窗确认 alterwarning(); break; case dialog.button_negative: toast.maketext(registeractivity.this, "拒绝" + which, toast.length_short).show(); break; } } }; //dialog参数设置 alertdialog.builder builder=new alertdialog.builder(registeractivity.this); //先得到构造器 builder.settitle("申请权限"); //设置标题 builder.setmessage("要允许lepao接收验证码短信吗?"); //设置内容 builder.seticon(r.mipmap.ic_launcher);//设置图标,图片id即可 builder.setpositivebutton("允许",dialogoncliclistener); builder.setnegativebutton("拒绝", dialogoncliclistener); builder.create().show(); } //申请权限 public void onrequestpermissionsresult(int requestcode, string[] permissions, int[] grantresults) { switch (requestcode){ case 1: if(grantresults.length > 0 && grantresults[0] == packagemanager.permission_granted){ //initsdk(); toast.maketext(this,"你授权。。。接收短信权限",toast.length_short).show(); }else{ toast.maketext(this,"你拒绝。。。接收短信权限",toast.length_short).show(); } break; case 2: if(grantresults.length > 0 && grantresults[0] == packagemanager.permission_granted){ toast.maketext(this,"你授权。。。发送短信权限",toast.length_short).show(); }else{ toast.maketext(this,"你拒绝。。。发送短信权限",toast.length_short).show(); } break; default: } } // 初始化短信sdk private void initsdk() { smssdk.initsdk(this, appkey, appsecret, true); //final handler handler = new handler(); eventhandler eventhandler = new eventhandler() { public void afterevent(int event, int result, object data) { //回调完成 if (result == smssdk.result_complete) { //验证码验证成功 if (event == smssdk.event_submit_verification_code) { toast("验证成功"); intent intent = new intent(registeractivity.this,setpwdactivity.class); intent.putextra("phone",phoneedit.gettext().tostring()); startactivity(intent); finish(); } //已发送验证码 else if (event == smssdk.event_get_verification_code) { toast("验证码已经发送"); } else { ((throwable) data).printstacktrace(); string str = data.tostring(); toast(str); } } if(result==smssdk.result_error) { toast("验证码错误"); } } }; // 注册回调监听接口 smssdk.registereventhandler(eventhandler); ready = true; } //吐司的一个小方法 private void toast(final string str) { runonuithread(new runnable() { @override public void run() { toast.maketext(registeractivity.this, str, toast.length_short).show(); } }); } //销毁短信注册 @override protected void ondestroy() { // 注销回调接口registereventhandler必须和unregistereventhandler配套使用,否则可能造成内存泄漏。 if(ready){ smssdk.unregisteralleventhandler(); } super.ondestroy(); } //初始化界面 private void initview(){ phoneedit = (edittext) findviewbyid(r.id.phone); smsedit = (edittext) findviewbyid(r.id.sms); getsms = (button) findviewbyid(r.id.getsms); submitsms = (button) findviewbyid(r.id.submitsms); login = (textview) findviewbyid(r.id.login); reset = (textview) findviewbyid(r.id.reset); } //弹窗确认 private void alterwarning(){ //先new出一个监听器,设置好监听 dialoginterface.onclicklistener dialogoncliclistener=new dialoginterface.onclicklistener(){ @override public void onclick(dialoginterface dialog, int which) { switch(which){ case dialog.button_positive: dialog.dismiss(); //通过sdk发送短信验证(请求获取短信验证码,在监听(eventhandle)中返回) smssdk.getverificationcode(country, phoneedit.gettext().tostring()); //设置获取验证码按钮不能点击 getsms.setclickable(false); //倒计时,执行次数为(time+1)*1000/1000,countdowntimer每次执行间隔:1000(单位为毫秒) countdowntimer = new countdowntimer((time+1)*1000, 1000) { @override public void ontick(long millisuntilfinished) { getsms.settext(time-- + "秒后再次获取验证码"); } @override public void onfinish() { //设置获取验证码按钮可以点击 getsms.setclickable(true); getsms.settext("点击获取短信验证码"); } }; countdowntimer.start(); break; case dialog.button_negative: dialog.dismiss(); toast.maketext(registeractivity.this, "已取消", toast.length_short).show(); break; } } }; //dialog参数设置 alertdialog.builder builder=new alertdialog.builder(this); //先得到构造器 builder.settitle("发送短信"); //设置标题 builder.setmessage("我们将把验证码发送到以下号码:\n"+country+"-"+phoneedit.gettext().tostring()); //设置内容 builder.seticon(r.drawable.icon);//设置图标,图片id即可 builder.setpositivebutton("确认",dialogoncliclistener); builder.setnegativebutton("取消", dialogoncliclistener); builder.create().show(); } //判断手机号码是否已注册过 public boolean isregister(){ boolean islogin = false; 。。。。。299 return islogin; } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。