本文写了一个常见的功能——手机app中注册或绑定手机号的获取验证码的功能,也就是短信验证功能
具体效果就是,你在注册界面填写手机号,点击获取验证码按钮,---然后会收到验证短信,填入验证码后点击注册按钮,如果验证正确就可以跳转到另外一个界面
1.mob官网下载对应的sdk
2.将sdk作为一个library导入到你的项目中
具体代码如下:
首先配置文件加入权限:
android:name="cn.smssdk.SMSSDKUIShell" android:configChanges="keyboardHidden|orientation|screenSize" android:theme="@android:style/Theme.Translucent.NoTitleBar" android:windowSoftInputMode="stateHidden|adjustResize"/> packagecom.example.administrator.mobregister; importandroid.app.Activity; importandroid.content.Intent; importandroid.os.Bundle; importandroid.os.Handler; importandroid.os.Message; importandroid.text.TextUtils; importandroid.util.Log; importandroid.view.View; importandroid.view.Window; importandroid.widget.Button; importandroid.widget.EditText; importandroid.widget.Toast; importcn.smssdk.EventHandler; importcn.smssdk.SMSSDK; public classRegisterActivityextendsActivityimplementsView.OnClickListener { StringAPPKEY="101732155b605"; StringAPPSECRETE="69d1850f4b74100266ab576b64e6cb16"; //电话号码输入框 privateEditTextmPhoneEdt; //验证码输入框 privateEditTextmCodeEdt; //发送验证码按钮 privateButtonmCodeRequestBtn; //注册按钮 privateButtonmRegisterBtn; private inti=30; @Override protected voidonCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.activity_register); init(); } /** * 初始化控件 */ private voidinit() { mPhoneEdt= (EditText) findViewById(R.id.input_phone_et); mCodeEdt= (EditText) findViewById(R.id.input_code_et); mCodeRequestBtn= (Button) findViewById(R.id.request_code_btn); mRegisterBtn= (Button) findViewById(R.id.register_btn); mCodeRequestBtn.setOnClickListener(this); mRegisterBtn.setOnClickListener(this); SMSSDK.initSDK(this,APPKEY,APPSECRETE); EventHandler eventHandler =newEventHandler() { @Override public voidafterEvent(intevent, intresult,Object data) { Message message =newMessage(); message.arg1= event; message.arg2= result; message.obj= data; handler.sendMessage(message); } }; //注册回调监听接口 SMSSDK.registerEventHandler(eventHandler); } @Override public voidonClick(View view) { String mIphone =mPhoneEdt.getText().toString(); switch(view.getId()) { caseR.id.request_code_btn: if(judgePhoneNums(mIphone)) { SMSSDK.getVerificationCode("86",mIphone); mCodeRequestBtn.setClickable(false); mCodeRequestBtn.setText("重新发送("+i+")"); newThread(newRunnable() { @Override public voidrun() { for(;i>0;i--) { handler.sendEmptyMessage(1); if(i<=0) { break; } try{ Thread.sleep(1000); }catch(InterruptedException e) { e.printStackTrace(); } } handler.sendEmptyMessage(2); } }).start(); break; }else{ } break; caseR.id.register_btn: //将收到的验证码和手机号提交再次核对 SMSSDK.submitVerificationCode("86",mIphone,mCodeEdt.getText().toString()); break; } } /** * 判断手机号码是否合理 * *@paramphoneNums */ private booleanjudgePhoneNums(String phoneNums) { if(isMatchLength(phoneNums,11) &&isMobileNO(phoneNums)) { return true; } Toast.makeText(this,"手机号码输入有误!",Toast.LENGTH_SHORT).show(); return false; } /** * 判断一个字符串的位数 * *@paramstr *@paramlength *@return */ public static booleanisMatchLength(String str, intlength) { if(str.isEmpty()) { return false; }else{ returnstr.length() == length ?true:false; } } /** * 验证手机格式 */ public static booleanisMobileNO(String mobileNums) { /* * 移动:134、135、136、137、138、139、150、151、157(TD)、158、159、187、188 * 联通:130、131、132、152、155、156、185、186 电信:133、153、180、189、(1349卫通) * 总结起来就是第一位必定为1,第二位必定为3或5或8,其他位置的可以为0-9 */ String telRegex ="[1][358]\\d{9}";// "[1]"代表第1位为数字1,"[358]"代表第二位可以为3、5、8中的一个,"\\d{9}"代表后面是可以是0~9的数字,有9位。 if(TextUtils.isEmpty(mobileNums)) return false; else returnmobileNums.matches(telRegex); } Handlerhandler=newHandler() { @Override public voidhandleMessage(Message msg) { if(msg.what==1) { mCodeRequestBtn.setText("重新发送"+i+"s"); }else if(msg.what==2) { mCodeRequestBtn.setText("获取验证码"); mCodeRequestBtn.setClickable(true); }else{ intevent = msg.arg1; intresult = msg.arg2; Object data = msg.obj; Log.e("event","event="+ event); if(result == SMSSDK.RESULT_COMPLETE) { //回调完成 if(event == SMSSDK.EVENT_SUBMIT_VERIFICATION_CODE) { //提交验证码成功 Toast.makeText(getApplicationContext(),"提交验证码成功", Toast.LENGTH_SHORT).show(); Intent intent =newIntent(RegisterActivity.this, OkActivity.class); startActivity(intent); }else if(event == SMSSDK.EVENT_GET_VERIFICATION_CODE) { //获取验证码成功 Toast.makeText(getApplicationContext(),"正在获取验证码", Toast.LENGTH_SHORT).show(); }else if(event == SMSSDK.EVENT_GET_SUPPORTED_COUNTRIES) { //返回支持发送验证码的国家列表 } } } } }; @Override protected voidonDestroy() { SMSSDK.unregisterAllEventHandler(); super.onDestroy(); } } 最后加上mob官网,里面有详细的说明。Mob官网网址然后声明activity(固定格式无法修改)
xml文件很简单就不上传了,如图:
注册界面activity: