1、参考资料Mob网站:http://www.mob.com/Mob在Github上的例子:https://github.com/MobClub/SMSSDK-for-Android教程:http://www.cnblogs.com/lizhanqi/p/5720962.html ...
1、参考资料
Mob网站:http://www.mob.com/
Mob在Github上的例子:https://github.com/MobClub/SMSSDK-for-Android
教程:http://www.cnblogs.com/lizhanqi/p/5720962.html
教程的源代码: http://git.oschina.net/lizhanqi/MobSMSDemo
Dialog教程:http://blog.csdn.net/liang5630/article/details/44098899
定时器教程:http://www.cnblogs.com/wansho/p/5104335.html
2、前期准备
(1)Mob网站上下载SMS对应的SDK,解压出来为图1,打开图1,将其中的文件拷贝到as项目中的libs文件夹下,另外在add as library。
图1
图2
(2)在as项目中的AndroidManifest.
图3
(3)如果图4中的targetSdkVersion大于22,那么在代码中必须动态申请权限。
图4
(4)在as项目中的图7中的build.gradle文件中添加图5和图6红色框中内容。
图5
图6
图7
(5)在Mob网站上申请App Key和App Secret。
图8
(6)Toast
3、代码(没整理,将就看)
1 package com.gxu.lepao.activity; 2 3 import android.Manifest; 4 import android.app.Dialog; 5 import android.content.DialogInterface; 6 import android.content.Intent; 7 import android.content.pm.PackageManager; 8 import android.os.Bundle; 9 import android.os.CountDownTimer; 10 import android.os.Handler; 11 import android.os.Message; 12 import android.support.v4.app.ActivityCompat; 13 import android.support.v4.content.ContextCompat; 14 import android.support.v7.app.AlertDialog; 15 import android.text.TextUtils; 16 import android.util.Log; 17 import android.view.View; 18 import android.widget.Button; 19 import android.widget.EditText; 20 import android.widget.TextView; 21 import android.widget.Toast; 22 import com.gxu.lepao.R; 23 import com.gxu.lepao.model.UserInfo; 24 import org.litepal.crud.DataSupport;//LitePal开源数据库框架 25 import java.util.List; 26 import cn.smssdk.EventHandler;//Mob短信验证码 27 import cn.smssdk.SMSSDK;//Mob短信验证码 28 29 /** 30 * Created by ljy on 2017-05-21. 31 * 获取和验证短信验证码界面 32 */ 33 34 public class RegisterActivity extends BaseActivity { 35 36 private EditText phoneEdit; 37 private EditText smsEdit; 38 private Button getSms; 39 private Button submitSms; 40 private TextView login; 41 private TextView reset; 42 private CountDownTimer countDownTimer; 43 //倒计时 44 private int TIME = 60; 45 //这是中国区号,如果需要其他国家列表,可以使用getSupportedCountries();获得国家区号 46 public String country = "86"; 47 //APPKEY 48 private static String appKey = "1e0d15118480d"; 49 // 填写从短信SDK应用后台注册得到的APPSECRET 50 private static String appSecret = "daa97d794e2436abcae624ac3785d2ef"; 51 //表示是否使用了registerEventHandler 52 private boolean ready; 53 54 55 @Override 56 protected void onCreate(Bundle savedInstanceState) { 57 super.onCreate(savedInstanceState); 58 Log.d("RegisterActivity","Task; id is " + getTaskId()); 59 setContentView(R.layout.activity_register); 60 // 初始化界面 61 initView(); 62 //初始化SMSSDK 63 initSDK(); 64 getSms.setOnClickListener(new View.OnClickListener(){ 65 @Override 66 public void onClick(View v) { 67 boolean isLogin = false; 68 //判断手机号码是否已注册过 69 isLogin = isRegister(); 70 if(!TextUtils.isEmpty(phoneEdit.getText().toString())){ 71 if(!isLogin){ 72 //发送短信权限 73 if(ContextCompat.checkSelfPermission(RegisterActivity.this 74 ,Manifest.permission.RECEIVE_SMS) != PackageManager.PERMISSION_GRANTED){ 75 //显示申请权限弹窗 76 showRequestPermission(); 77 }else{ 78 //弹窗确认 79 alterWarning(); 80 } 81 }else{ 82 Toast.makeText(RegisterActivity.this,"此手机号码已经注册过",Toast.LENGTH_SHORT).show(); 83 } 84 }else{ 85 Toast.makeText(RegisterActivity.this,"请输入手机号码",Toast.LENGTH_SHORT).show(); 86 } 87 } 88 }); 89 submitSms.setOnClickListener(new View.OnClickListener(){ 90 @Override 91 public void onClick(View v) { 92 String sms = smsEdit.getText().toString(); 93 String phone = phoneEdit.getText().toString(); 94 if(!TextUtils.isEmpty(sms)){ 95 SMSSDK.submitVerificationCode( country, phone, sms); 96 }else{ 97 Toast.makeText(RegisterActivity.this,"请输入验证码",Toast.LENGTH_SHORT).show(); 98 } 99 }100 });101 login.setOnClickListener(new View.OnClickListener(){102 @Override103 public void onClick(View v) {104 Intent intent = new Intent(RegisterActivity.this,LoginActivity.class);105 startActivity(intent);106 }107 });108 reset.setOnClickListener(new View.OnClickListener(){109 @Override110 public void onClick(View v) {111 Intent intent = new Intent(RegisterActivity.this,ResetPwdActivity.class);112 startActivity(intent);113 }114 });115 }116 117 //申请权限弹窗118 private void showRequestPermission(){119 //先new出一个**,设置好监听120 DialogInterface.OnClickListener dialogOnclicListener=new DialogInterface.OnClickListener(){121 @Override122 public void onClick(DialogInterface dialog, int which) {123 switch(which){124 case Dialog.BUTTON_POSITIVE:125 //接收短信权限126 ActivityCompat.requestPermissions(RegisterActivity.this,new String[]{Manifest.permission.RECEIVE_SMS},1);127 //发送短信权限128 ActivityCompat.requestPermissions(RegisterActivity.this,new String[]{Manifest.permission.SEND_SMS},2);129 //弹窗确认130 alterWarning();131 break;132 case Dialog.BUTTON_NEGATIVE:133 Toast.makeText(RegisterActivity.this, "拒绝" + which, Toast.LENGTH_SHORT).show();134 break;135 }136 }137 };138 //dialog参数设置139 AlertDialog.Builder builder=new AlertDialog.Builder(RegisterActivity.this); //先得到构造器140 builder.setTitle("申请权限"); //设置标题141 builder.setMessage("要允许lepao接收验证码短信吗?"); //设置内容142 builder.setIcon(R.mipmap.ic_launcher);//设置图标,图片id即可143 builder.setPositiveButton("允许",dialogOnclicListener);144 builder.setNegativeButton("拒绝", dialogOnclicListener);145 builder.create().show();146 }147 148 //申请权限149 public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {150 switch (requestCode){151 case 1:152 if(grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED){153 //initSDK();154 Toast.makeText(this,"你授权。。。接收短信权限",Toast.LENGTH_SHORT).show();155 }else{156 Toast.makeText(this,"你拒绝。。。接收短信权限",Toast.LENGTH_SHORT).show();157 }158 break;159 case 2:160 if(grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED){161 Toast.makeText(this,"你授权。。。发送短信权限",Toast.LENGTH_SHORT).show();162 }else{163 Toast.makeText(this,"你拒绝。。。发送短信权限",Toast.LENGTH_SHORT).show();164 }165 break;166 default:167 }168 }169 170 // 初始化短信SDK171 private void initSDK() {172 SMSSDK.initSDK(this, appKey, appSecret, true);173 //final Handler handler = new Handler();174 EventHandler eventHandler = new EventHandler() {175 public void afterEvent(int event, int result, Object data) {176 //回调完成177 if (result == SMSSDK.RESULT_COMPLETE)178 {179 //验证码验证成功180 if (event == SMSSDK.EVENT_SUBMIT_VERIFICATION_CODE)181 {182 toast("验证成功");183 Intent intent = new Intent(RegisterActivity.this,SetPwdActivity.class);184 intent.putExtra("phone",phoneEdit.getText().toString());185 startActivity(intent);186 finish();187 }188 //已发送验证码189 else if (event == SMSSDK.EVENT_GET_VERIFICATION_CODE)190 {191 toast("验证码已经发送");192 } else193 {194 ((Throwable) data).printStackTrace();195 String str = data.toString();196 toast(str);197 }198 }199 if(result==SMSSDK.RESULT_ERROR) {200 toast("验证码错误");201 }202 203 }204 };205 // 注册回调监听接口206 SMSSDK.registerEventHandler(eventHandler);207 ready = true;208 }209 210 //吐司的一个小方法211 private void toast(final String str) {212 runOnUiThread(new Runnable() {213 @Override214 public void run() {215 Toast.makeText(RegisterActivity.this, str, Toast.LENGTH_SHORT).show();216 }217 });218 }219 220 221 222 //销毁短信注册223 @Override224 protected void onDestroy() {225 // 注销回调接口registerEventHandler必须和unregisterEventHandler配套使用,否则可能造成内存泄漏。226 if(ready){227 SMSSDK.unregisterAllEventHandler();228 }229 super.onDestroy();230 }231 232 //初始化界面233 private void initView(){234 phoneEdit = (EditText) findViewById(R.id.phone);235 smsEdit = (EditText) findViewById(R.id.sms);236 getSms = (Button) findViewById(R.id.getSms);237 submitSms = (Button) findViewById(R.id.submitSms);238 login = (TextView) findViewById(R.id.login);239 reset = (TextView) findViewById(R.id.reset);240 }241 242 //弹窗确认243 private void alterWarning(){244 //先new出一个**,设置好监听245 DialogInterface.OnClickListener dialogOnclicListener=new DialogInterface.OnClickListener(){246 @Override247 public void onClick(DialogInterface dialog, int which) {248 switch(which){249 case Dialog.BUTTON_POSITIVE:250 dialog.dismiss();251 //通过sdk发送短信验证(请求获取短信验证码,在监听(eventHandle)中返回)252 SMSSDK.getVerificationCode(country, phoneEdit.getText().toString());253 //设置获取验证码按钮不能点击254 getSms.setClickable(false);255 //倒计时,执行次数为(TIME+1)*1000/1000,countDownTimer每次执行间隔:1000(单位为毫秒)256 countDownTimer = new CountDownTimer((TIME+1)*1000, 1000) {257 @Override258 public void onTick(long millisUntilFinished) {259 getSms.setText(TIME-- + "秒后再次获取验证码");260 }261 262 @Override263 public void onFinish() {264 //设置获取验证码按钮可以点击265 getSms.setClickable(true);266 getSms.setText("点击获取短信验证码");267 }268 };269 countDownTimer.start();270 break;271 case Dialog.BUTTON_NEGATIVE:272 dialog.dismiss();273 Toast.makeText(RegisterActivity.this, "已取消", Toast.LENGTH_SHORT).show();274 break;275 }276 }277 };278 //dialog参数设置279 AlertDialog.Builder builder=new AlertDialog.Builder(this); //先得到构造器280 builder.setTitle("发送短信"); //设置标题281 builder.setMessage("我们将把验证码发送到以下号码:\n"+country+"-"+phoneEdit.getText().toString()); //设置内容282 builder.setIcon(R.drawable.icon);//设置图标,图片id即可283 builder.setPositiveButton("确认",dialogOnclicListener);284 builder.setNegativeButton("取消", dialogOnclicListener);285 builder.create().show();286 }287 288 //判断手机号码是否已注册过289 public boolean isRegister(){290 boolean isLogin = false;291 。。。。。299 return isLogin;300 }301 302 303 }
原标题:Android之短信验证码(用的Mob短信验证)
关键词:Android
*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们:
admin#shaoqun.com
(#换成@)。