1,首先第一步:按照官方提示,导入4个文件(两个jar文件,两个arr文件)
2,在onCreat()方法中初始化短信验证sdk,同时注册回调,代码如下:
//短信验证的appkey和appsecret private final String appKey = "17bf0ac4e3124"; private final String appSecret = "4d556631744cd2d96024d87baf1c3236"; // private final String appKey = "17dbdb1f2132c"; // private final String appSecret = "b29c1fb108505cc0aba1e48ba9ebb2e9"; private EventHandler eh; //每次验证请求需要间隔60S private int i = 60; //控制按钮样式是否改变 private boolean tag = true; private String strMobile = null; private int isCodeSubmitOk = 0; String strUserName=null; String strPw= null; /* 草料二维码appid和短信验证账号和密码 //appid42353618 hennashenghe@163.com TianQi8Cuo */ Handler mHandler = new Handler() { public void handleMessage(Message msg) { // TODO Auto-generated method stub super.handleMessage(msg); int event = msg.arg1; int result = msg.arg2; Object data = msg.obj; Log.e("event", "event=" + event); if (result == SMSSDK.RESULT_COMPLETE) { System.out.println("--------result"+event); //短信注册成功后,返回MainActivity,然后提示新好友 if (event == SMSSDK.EVENT_SUBMIT_VERIFICATION_CODE) {//提交验证码成功 isCodeSubmitOk= 1001; registerUserInfo(strUserName, strPw); } else if (event == SMSSDK.EVENT_GET_VERIFICATION_CODE){ //已经验证 Toast.makeText(getApplicationContext(), "验证码已发送,注意查收!", Toast.LENGTH_SHORT).show(); } else if (event ==SMSSDK.EVENT_GET_SUPPORTED_COUNTRIES){ //已经验证 //Toast.makeText(getApplicationContext(), "获取国家列表成功", Toast.LENGTH_SHORT).show(); } } else { // ((Throwable) data).printStackTrace(); // Toast.makeText(MainActivity.this, "验证码错误", Toast.LENGTH_SHORT).show(); // Toast.makeText(MainActivity.this, "123", Toast.LENGTH_SHORT).show(); int status = 0; try { ((Throwable) data).printStackTrace(); Throwable throwable = (Throwable) data; JSONObject object = new JSONObject(throwable.getMessage()); String des = object.optString("detail"); status = object.optInt("status"); //Toast.makeText(RegistActivity.this, status, Toast.LENGTH_SHORT).show(); if (!TextUtils.isEmpty(des)) { Toast.makeText(RegistActivity.this, des, Toast.LENGTH_SHORT).show(); return; } } catch (Exception e) { SMSLog.getInstance().w(e); } } } }; /** * ATTENTION: This was auto-generated to implement the App Indexing API. * See https://g.co/AppIndexing/AndroidStudio for more information. */ private GoogleApiClient client; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); ActivityMannager.newInstance().addActivity(this); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { // 透明状态栏 getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); // getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION); } setContentView(R.layout.login_layout); ButterKnife.bind(this); initView(); // 启动短信验证sdk SMSSDK.initSDK(this, appKey, appSecret,false); EventHandler eh=new EventHandler(){ @Override public void afterEvent(int event, int result, Object data) { Message msg = new Message(); msg.arg1 = event; msg.arg2 = result; msg.obj = data; mHandler.sendMessage(msg); } }; SMSSDK.registerEventHandler(eh); //注册短信回调 tv_getCode.setOnClickListener(new View.OnClickListener() { public void onClick(View v){ strMobile = etPhone.getText().toString().trim(); Pattern pattern=Pattern.compile("[1][358]\\d{9}"); Matcher matcher=pattern.matcher(strMobile); //String telRegex = "[1][358]\\d{9}"; //获取验证码操作 //strMobile = ((EditText) findViewById(R.id.etPhone)).getText().toString(); if (strMobile.equals("")) { Toast.makeText(RegistActivity.this, "手机号不能为空!", Toast.LENGTH_SHORT).show(); return; }else{ //如果手机号码无误,则发送验证请求 tv_getCode.setClickable(true); getVerificationCode("86", etPhone.getText().toString().trim()); if (!matcher.matches()) { //Toast.makeText(RegistActivity.this, "请填写正确的手机号码", Toast.LENGTH_SHORT).show(); return; }else { changeBtnGetCode(); } } } } ); // ATTENTION: This was auto-generated to implement the App Indexing API. // See https://g.co/AppIndexing/AndroidStudio for more information. client = new GoogleApiClient.Builder(this).addApi(AppIndex.API).build(); } /* * 改变按钮样式 60s倒计时 * */ private void changeBtnGetCode() { Thread thread = new Thread() { @Override public void run() { if (tag) { while (i > 0) { i--; //如果活动为空 if (RegistActivity.this == null) { break; } RegistActivity.this.runOnUiThread(new Runnable() { @Override public void run() { tv_getCode.setText(i+"s后重新获取"); tv_getCode.setClickable(false); } }); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } tag = false; } i = 60; tag = true; if (RegistActivity.this != null) { RegistActivity.this.runOnUiThread(new Runnable() { @Override public void run() { tv_getCode.setText("获取验证码"); tv_getCode.setClickable(true); } }); } } }; thread.start(); }
3,其中这个方法是获得短信验证码的方法:
if (strMobile.equals("")) { Toast.makeText(RegistActivity.this, "手机号不能为空!", Toast.LENGTH_SHORT).show(); return; }else{ //如果手机号码无误,则发送验证请求 tv_getCode.setClickable(true); getVerificationCode("86", etPhone.getText().toString().trim());
4,这个是提交短信验证码的方法:
private void checkIsCodeOk() { //验证操作 String code= et_inputcode.getText().toString().trim(); // strMobile = etPhone.getText().toString().trim(); //填写了验证码,进行验证 //SuperToast.create(RegistActivity.this, code, 2000).show(); //Log.d("验证码",code); SMSSDK.submitVerificationCode("86", strMobile, code); //SuperToast.create(this, isCodeSubmitOk+"", 2000).show(); }