[mob]Android手机短信验证(自定义的)

来源:互联网 发布:网络基础设施建设问题 编辑:程序博客网 时间:2024/05/20 00:53

package qq.bwei.com.phone;

import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import cn.smssdk.EventHandler;
import cn.smssdk.SMSSDK;
import static cn.smssdk.SMSSDK.getSupportedCountries;
import static cn.smssdk.SMSSDK.getVerificationCode;
import static cn.smssdk.SMSSDK.submitVerificationCode;

public class MainActivity extends AppCompatActivity {
private EventHandler eventHandler;
private int i;
private EditText et_phone;
private EditText et_code;
private Button bt_getCode;
private Button bt_vertify;
private String phone;
private boolean tag=false;
private Handler handler=new Handler(){
@Override
public void handleMessage(Message msg) {
switch (msg.what)
{
case 0x111:
bt_getCode.setText(“获取验证码(” + i + “)”);
bt_getCode.setClickable(false);
break;
case 0x112:
bt_getCode.setText(“获取验证码”);
bt_getCode.setClickable(true);
break;
}
switch (msg.arg1) {
case 10:
//客户端验证成功,可以进行注册,返回校验的手机和国家代码phone/country
Toast.makeText(MainActivity.this, msg.obj.toString(), Toast.LENGTH_SHORT).show();
break;
case 1:
//获取验证码成功
Toast.makeText(MainActivity.this, msg.obj.toString(), Toast.LENGTH_SHORT).show();
break;
case 2:
//返回支持发送验证码的国家列表
Toast.makeText(MainActivity.this, msg.obj.toString(), Toast.LENGTH_SHORT).show();
break;
}
}
};

@Overrideprotected void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView(R.layout.activity_main);    et_phone = (EditText) findViewById(R.id.et_phone);    et_code = (EditText) findViewById(R.id.et_code);    bt_getCode = (Button) findViewById(R.id.bt_getCode);    bt_vertify = (Button) findViewById(R.id.bt_verify);    // 如果希望在读取通信录的时候提示用户,可以添加下面的代码,并且必须在其他代码调用之前,否则不起作用;如果没这个需求,可以不加这行代码    boolean boolShowInDialog = false;    SMSSDK.setAskPermisionOnReadContact(boolShowInDialog);    eventHandler=new EventHandler(){       // public static final String TAG = "TAG";        @Override        public void afterEvent(int event, int result, Object data) {            if (result == SMSSDK.RESULT_COMPLETE) {                //回调完成                if (event == SMSSDK.EVENT_SUBMIT_VERIFICATION_CODE) {                    //提交验证码成功                    Message msg = new Message();                    msg.arg1 = 10;                    msg.obj = data;                    handler.sendMessage(msg);                    Log.d("xxx", "提交验证码成功");                } else if (event == SMSSDK.EVENT_GET_VERIFICATION_CODE) {                    Message msg = new Message();                    //获取验证码成功                    msg.arg1 = 1;                    msg.obj = "获取验证码成功";                    handler.sendMessage(msg);                    Log.d("xxx", "获取验证码成功");                } else if (event == SMSSDK.EVENT_GET_SUPPORTED_COUNTRIES) {                    Message msg = new Message();                    //返回支持发送验证码的国家列表                    msg.arg1 = 2;                    msg.obj = "返回支持发送验证码的国家列表";                    handler.sendMessage(msg);                    Log.d("xxx", "返回支持发送验证码的国家列表");                }            } else {                Message msg = new Message();                //返回支持发送验证码的国家列表                msg.arg1 = 3;                msg.obj = "验证失败";                handler.sendMessage(msg);                Log.d("xxx", "验证失败");                ((Throwable) data).printStackTrace();            }        }    };    bt_getCode.setClickable(false);    bt_getCode.setOnClickListener(new View.OnClickListener() {        @Override        public void onClick(View v) {            //获取验证码操作            phone = et_phone.getText().toString();            if(phone.equals("")){                Toast.makeText(MainActivity.this,"手机号不能为空",Toast.LENGTH_SHORT).show();            }else{                //填写了手机号码,isMobileNO(phone)判断号码格式                if(isMobileNO(phone)){                    //如果手机号码无误,则发送验证请求                    bt_getCode.setClickable(true);                    //让按钮的样式变成60S倒计时                    changeBtnGetCode();                    //SMSSDK中自带的2个方法                    getSupportedCountries();                    getVerificationCode("86", phone);                }else{                    //手机号格式有误                    Toast.makeText(MainActivity.this,"手机号格式错误,请检查",Toast.LENGTH_SHORT).show();                }            }        }    });    bt_vertify.setOnClickListener(new View.OnClickListener() {        @Override        public void onClick(View v) {            //验证操作            String code = et_code.getText().toString();            if (code.equals("")){                Toast.makeText(MainActivity.this,"验证码不能为空",Toast.LENGTH_SHORT).show();            }else{                //填写了验证码,进行验证,SMSSDK自带的方法                submitVerificationCode("86", phone, code);            }        }    });    SMSSDK.registerEventHandler(eventHandler);}private void changeBtnGetCode() {    Thread thread = new Thread() {        @Override        public void run() {            if (tag) {                while (i > 0) {                    i--;                    //如果活动为空                    if (MainActivity.this == null) {                        break;                    }                    handler.sendEmptyMessage(0x111);                    try {                        Thread.sleep(1000);                    } catch (InterruptedException e) {                        e.printStackTrace();                    }                }                tag = false;                handler.sendEmptyMessage(0x112);                return;            }            i = 60;            tag = true;            handler.sendEmptyMessage(0x112);            changeBtnGetCode();        }    };    thread.start();}private boolean isMobileNO(String phone) {   /*移动: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(phone)) return false;    else return phone.matches(telRegex);}

}