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获取短信验证码的实现技巧。