Android手机号注册、绑定手机号获取短信验证码实例
本文写了一个常见的功能——手机app中注册或绑定手机号的获取验证码的功能,也就是短信验证功能
具体效果就是,你在注册界面填写手机号,点击获取验证码按钮,---然后会收到验证短信,填入验证码后点击注册按钮,如果验证正确就可以跳转到另外一个界面
1.首先大家需要在mob官网注册一个账号,mob是一个免费的短信验证平台
2.在mob.com后台创建应用
3.下载对应的sdk
4.将sdk作为一个library导入到你的项目中
5.现在就可以在你的项目中编写代码使用mob提供的这个功能了
具体代码如下:
首先配置文件加入权限:
<uses-permissionandroid:name="android.permission.READ_CONTACTS"/> <uses-permissionandroid:name="android.permission.READ_PHONE_STATE"/> <uses-permissionandroid:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <uses-permissionandroid:name="android.permission.ACCESS_NETWORK_STATE"/> <uses-permissionandroid:name="android.permission.ACCESS_WIFI_STATE"/> <uses-permissionandroid:name="android.permission.INTERNET"/> <uses-permissionandroid:name="android.permission.RECEIVE_SMS"/> <uses-permissionandroid:name="android.permission.GET_TASKS"/> <uses-permissionandroid:name="android.permission.ACCESS_FINE_LOCATION"/>
然后声明activity(这是固定的不能修改,直接复制粘贴到你的配置文件就行)
<activity android:name="cn.smssdk.SMSSDKUIShell" android:configChanges="keyboardHidden|orientation|screenSize" android:theme="@android:style/Theme.Translucent.NoTitleBar" android:windowSoftInputMode="stateHidden|adjustResize"/>
注册界面xml布局文件
<?xmlversion="1.0"encoding="utf-8"?> <RelativeLayoutxmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <EditText android:id="@+id/login_input_phone_et" android:layout_width="280dp" android:layout_height="wrap_content" android:layout_alignParentTop="true" android:layout_centerHorizontal="true" android:layout_marginTop="107dp" android:ems="10" android:hint="请输入手机号" android:inputType="phone"/> <requestFocus/> <EditText android:id="@+id/login_input_code_et" android:layout_width="170dp" android:layout_height="wrap_content" android:layout_alignLeft="@+id/login_input_phone_et" android:layout_below="@+id/login_input_phone_et" android:layout_marginTop="44dp" android:hint="请输入验证码" android:inputType="textPassword"> </EditText> <Button android:id="@+id/login_request_code_btn" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignRight="@+id/login_input_phone_et" android:layout_alignTop="@+id/login_input_code_et" android:text="获取验证码"/> <Button android:id="@+id/login_commit_btn" android:layout_width="280dp" android:layout_height="wrap_content" android:layout_alignLeft="@+id/login_input_code_et" android:layout_below="@+id/login_input_code_et" android:layout_marginTop="44dp" android:text="注册"/> </RelativeLayout>
注册界面activity
packagecom.mobdemo.view; importcn.smssdk.EventHandler; importcn.smssdk.SMSSDK; importandroid.app.Activity; importandroid.content.Intent; importandroid.os.Bundle; importandroid.os.Handler; importandroid.os.Message; importandroid.text.TextUtils; importandroid.util.Log; importandroid.view.Gravity; importandroid.view.View; importandroid.view.View.OnClickListener; importandroid.widget.Button; importandroid.widget.EditText; importandroid.widget.FrameLayout; importandroid.widget.ProgressBar; importandroid.widget.Toast; importandroid.widget.FrameLayout.LayoutParams; publicclassLoginActivityextendsActivityimplementsOnClickListener{ StringAPPKEY="101732155b605"; StringAPPSECRETE="69d1850f4b74100266ab576b64e6cb16"; //手机号输入框 privateEditTextinputPhoneEt; //验证码输入框 privateEditTextinputCodeEt; //获取验证码按钮 privateButtonrequestCodeBtn; //注册按钮 privateButtoncommitBtn; // inti=30; @Override protectedvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.activity_login); init(); } /** *初始化控件 */ privatevoidinit(){ inputPhoneEt=(EditText)findViewById(R.id.login_input_phone_et); inputCodeEt=(EditText)findViewById(R.id.login_input_code_et); requestCodeBtn=(Button)findViewById(R.id.login_request_code_btn); commitBtn=(Button)findViewById(R.id.login_commit_btn); requestCodeBtn.setOnClickListener(this); commitBtn.setOnClickListener(this); //启动短信验证sdk SMSSDK.initSDK(this,APPKEY,APPSECRETE); EventHandlereventHandler=newEventHandler(){ @Override publicvoidafterEvent(intevent,intresult,Objectdata){ Messagemsg=newMessage(); msg.arg1=event; msg.arg2=result; msg.obj=data; handler.sendMessage(msg); } }; //注册回调监听接口 SMSSDK.registerEventHandler(eventHandler); } @Override publicvoidonClick(Viewv){ StringphoneNums=inputPhoneEt.getText().toString(); switch(v.getId()){ caseR.id.login_request_code_btn: //1.通过规则判断手机号 if(!judgePhoneNums(phoneNums)){ return; }//2.通过sdk发送短信验证 SMSSDK.getVerificationCode("86",phoneNums); //3.把按钮变成不可点击,并且显示倒计时(正在获取) requestCodeBtn.setClickable(false); requestCodeBtn.setText("重新发送("+i+")"); newThread(newRunnable(){ @Override publicvoidrun(){ for(;i>0;i--){ handler.sendEmptyMessage(-9); if(i<=0){ break; } try{ Thread.sleep(1000); }catch(InterruptedExceptione){ e.printStackTrace(); } } handler.sendEmptyMessage(-8); } }).start(); break; caseR.id.login_commit_btn: //将收到的验证码和手机号提交再次核对 SMSSDK.submitVerificationCode("86",phoneNums,inputCodeEt .getText().toString()); //createProgressBar(); break; } } /** * */ Handlerhandler=newHandler(){ publicvoidhandleMessage(Messagemsg){ if(msg.what==-9){ requestCodeBtn.setText("重新发送("+i+")"); }elseif(msg.what==-8){ requestCodeBtn.setText("获取验证码"); requestCodeBtn.setClickable(true); i=30; }else{ intevent=msg.arg1; intresult=msg.arg2; Objectdata=msg.obj; Log.e("event","event="+event); if(result==SMSSDK.RESULT_COMPLETE){ //短信注册成功后,返回MainActivity,然后提示 if(event==SMSSDK.EVENT_SUBMIT_VERIFICATION_CODE){//提交验证码成功 Toast.makeText(getApplicationContext(),"提交验证码成功", Toast.LENGTH_SHORT).show(); Intentintent=newIntent(LoginActivity.this, MainActivity.class); startActivity(intent); }elseif(event==SMSSDK.EVENT_GET_VERIFICATION_CODE){ Toast.makeText(getApplicationContext(),"正在获取验证码", Toast.LENGTH_SHORT).show(); }else{ ((Throwable)data).printStackTrace(); } } } } }; /** *判断手机号码是否合理 * *@paramphoneNums */ privatebooleanjudgePhoneNums(StringphoneNums){ if(isMatchLength(phoneNums,11) &&isMobileNO(phoneNums)){ returntrue; } Toast.makeText(this,"手机号码输入有误!",Toast.LENGTH_SHORT).show(); returnfalse; } /** *判断一个字符串的位数 *@paramstr *@paramlength *@return */ publicstaticbooleanisMatchLength(Stringstr,intlength){ if(str.isEmpty()){ returnfalse; }else{ returnstr.length()==length?true:false; } } /** *验证手机格式 */ publicstaticbooleanisMobileNO(StringmobileNums){ /* *移动: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 */ StringtelRegex="[1][358]\\d{9}";//"[1]"代表第1位为数字1,"[358]"代表第二位可以为3、5、8中的一个,"\\d{9}"代表后面是可以是0~9的数字,有9位。 if(TextUtils.isEmpty(mobileNums)) returnfalse; else returnmobileNums.matches(telRegex); } /** *progressbar */ privatevoidcreateProgressBar(){ FrameLayoutlayout=(FrameLayout)findViewById(android.R.id.content); FrameLayout.LayoutParamslayoutParams=newFrameLayout.LayoutParams( LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT); layoutParams.gravity=Gravity.CENTER; ProgressBarmProBar=newProgressBar(this); mProBar.setLayoutParams(layoutParams); mProBar.setVisibility(View.VISIBLE); layout.addView(mProBar); } @Override protectedvoidonDestroy(){ SMSSDK.unregisterAllEventHandler(); super.onDestroy(); } }
验证成功的界面我就不写了,希望大家通过这个实例可以学习掌握Android获取短信验证码的实现技巧。