Android之短信验证码

转载 2016年08月29日 03:25:22

我们今天所使用的方案只是Android手机设备集成短信验证码功能的方案之一。

我们所采用的方案是使用聚合数据的短信验证sdk。


程序的界面如下所示:



实现步骤:

1.到聚合数据官网上申请短信验证SDK数据,生成AppKey,如下图所示:



2.配置工程,把相关的sdk库导入到Project中去,:



3.配置AndroidManifest.xml文件,在Application节点中加入以下代码:

  1. <meta-data  
  2.     android:name="JUHE_KEY"  
  3.     android:value="你的appkey" />  

4.在src中加入MyApplication类,并且在AndroidManifest.xml文件中将application的name属性设置为src中定义的MyApplication(如android:name="com.bear.smscaptcha.MyApplication"),在MyApplication的onCreate()方法中调用接口初始化:

  1. import com.thinkland.sdk.util.CommonFun;  
  2.   
  3. import android.app.Application;  
  4.   
  5. public class MyApplication extends Application {  
  6.   
  7.     @Override  
  8.     public void onCreate() {  
  9.         // TODO Auto-generated method stub  
  10.         super.onCreate();  
  11.   
  12.         // 在使用SDK各组件之前初始化context信息,传入ApplicationContext  
  13.         // 注意该方法要再setContentView方法之前实现  
  14.         /** 
  15.          * 初始化方法 
  16.          *  
  17.          * @param context 
  18.          * @needFriends 是否需要好友功能 
  19.          */  
  20.   
  21.         CommonFun.initialize(getApplicationContext(), false);  
  22.     }  
  23.   
  24. }  

5.完成主Demo类,内容如下:

  1. import android.app.Activity;  
  2. import android.content.pm.ActivityInfo;  
  3. import android.os.Bundle;  
  4. import android.text.Editable;  
  5. import android.text.Html;  
  6. import android.text.TextWatcher;  
  7. import android.view.View;  
  8. import android.view.View.OnClickListener;  
  9. import android.widget.Button;  
  10. import android.widget.EditText;  
  11. import android.widget.ImageView;  
  12. import android.widget.TextView;  
  13. import android.widget.Toast;  
  14.   
  15. import com.thinkland.sdk.sms.SMSCaptcha;  
  16. import com.thinkland.sdk.util.BaseData.ResultCallBack;  
  17.   
  18. public class MainActivity extends Activity implements OnClickListener{  
  19.       
  20.     private SMSCaptcha mCaptcha; //短信sdk主对象  
  21.     private EditText etPhoneNum;  //手机号码输入框  
  22.     private ImageView ivClear;  //清除已经输入内容的图标  
  23.     private Button btnNext; //下一步按钮  
  24.       
  25.     private EditText etCaptchaNum; //验证码输入框  
  26.     private Button btnSubmit; //提交验证码  
  27.     private ImageView ivSmsClear;   
  28.     private TextView tvUnreceiveIdentify;     
  29.       
  30.     private static final int RETRY_INTERVAL = 60//设置一个倒计时时间  
  31.     private int time = RETRY_INTERVAL;  
  32.       
  33.       
  34.     @Override  
  35.     protected void onCreate(Bundle savedInstanceState) {  
  36.         super.onCreate(savedInstanceState);  
  37.         setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);  
  38.         setContentView(R.layout.activity_main);  
  39.         initData();  
  40.         setupViews();  
  41.     }  
  42.       
  43.     private void initData(){  
  44.         //初始化sdk主操作对象  
  45.         mCaptcha = SMSCaptcha.getInstance();  
  46.     }  
  47.       
  48.     /** 
  49.      * 初始化界面控件 
  50.      */  
  51.     private void setupViews(){  
  52.         btnNext = (Button) findViewById(R.id.btn_next);  
  53.         ivClear = (ImageView) findViewById(R.id.iv_clear);  
  54.         btnNext.setOnClickListener(this);  
  55.         ivClear.setOnClickListener(this);  
  56.           
  57.         etCaptchaNum = (EditText) findViewById(R.id.et_sms_captcha);  
  58.         btnSubmit = (Button) findViewById(R.id.btn_submit);  
  59.         ivSmsClear = (ImageView) findViewById(R.id.iv_sms_clear);  
  60.         btnSubmit.setOnClickListener(this);  
  61.         ivSmsClear.setOnClickListener(this);  
  62.         tvUnreceiveIdentify = (TextView) findViewById(R.id.tv_unreceive_identify);  
  63.           
  64.         etPhoneNum = (EditText) findViewById(R.id.et_write_phone);  
  65.         etPhoneNum.setText("");  
  66.         etPhoneNum.requestFocus();  
  67.           
  68.         etPhoneNum.addTextChangedListener(new TextWatcher() {  
  69.               
  70.             @Override  
  71.             public void onTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {  
  72.                 // TODO Auto-generated method stub  
  73.                 refreshViews(arg0);  
  74.             }  
  75.               
  76.             @Override  
  77.             public void beforeTextChanged(CharSequence arg0, int arg1, int arg2,  
  78.                     int arg3) {  
  79.                 // TODO Auto-generated method stub  
  80.                   
  81.             }  
  82.               
  83.             @Override  
  84.             public void afterTextChanged(Editable arg0) {  
  85.                 // TODO Auto-generated method stub  
  86.                   
  87.             }  
  88.         });  
  89.     }  
  90.       
  91.     //根据edittext的内容来判断是否应当出现“清除所有”的按钮x  
  92.     private void refreshViews(CharSequence s){  
  93.         if(s.length() >0){  
  94.             btnNext.setEnabled(true);  
  95.             ivClear.setVisibility(View.VISIBLE);  
  96.         }else{  
  97.             btnNext.setEnabled(false);  
  98.             ivClear.setVisibility(View.GONE);  
  99.         }  
  100.     }  
  101.       
  102.     //倒计时方法  
  103.     private void countDown(){  
  104.         new Thread(new  Runnable() {  
  105.             public void run() {  
  106.                 while(time-- > 0){  
  107.                     final String unReceive = MainActivity.this.getResources().getString(R.string.smssdk_receive_msg, time);  
  108.                       
  109.                     runOnUiThread(new Runnable() {  
  110.                         public void run() {  
  111.                             tvUnreceiveIdentify.setText(Html.fromHtml(unReceive));  
  112.                             tvUnreceiveIdentify.setEnabled(false);  
  113.                         }  
  114.                     });  
  115.                       
  116.                     try {  
  117.                         Thread.sleep(1000);  
  118.                     } catch (Exception e) {  
  119.                         // TODO: handle exception  
  120.                     }  
  121.                       
  122.                 }  
  123.                 time = RETRY_INTERVAL;  
  124.             }  
  125.         }).start();  
  126.     }  
  127.   
  128.     @Override  
  129.     public void onClick(View view) {  
  130.             switch (view.getId()) {  
  131.             case R.id.btn_next:  
  132.                 //删除掉字符串中所有的空格  
  133.                 String phone = etPhoneNum.getText().toString().trim().replace("\\s*""");  
  134.                   
  135.                 /** 
  136.                  * 请求短信验证码 
  137.                  *  
  138.                  * code 返回码: 
  139.                         服务器: 0 成功; 1 错误; 
  140.                         本地: -2 本地网络异常; -3 服务器网络异常;-4 解析错误;-5初始化异常 
  141.                     reason  返回信息 成功或错误原因. 
  142.                     result  返回结果,JSON格式.错误或者无返回值时为空. 
  143.  
  144.                  */  
  145.                 mCaptcha.sendCaptcha(phone, new ResultCallBack() {  
  146.                       
  147.                     @Override  
  148.                     public void onResult(int code, String reason, String result) {  
  149.                         // TODO Auto-generated method stub  
  150.                         if(code == 0){  
  151.                             //调用成功  
  152.                         }  
  153.                     }  
  154.                 });  
  155.                   
  156.                 countDown();  
  157.                 break;  
  158.             case R.id.iv_clear:  
  159.                 etPhoneNum.getText().clear();  
  160.                 break;  
  161.                   
  162.             case R.id.btn_submit:  
  163.                 String phoneNumber = etPhoneNum.getText().toString().trim().replace("\\s*""");  
  164.                 String code = etCaptchaNum.getText().toString().trim().replace("\\s*""");  
  165.                   
  166.                 /** 
  167.                  * 验证短信验证码 
  168.                  *  
  169.                  * code 返回码: 
  170.                         服务器: 0 成功; 1 错误; 
  171.                         本地: -2 本地网络异常; -3 服务器网络异常;-4 解析错误;-5初始化异常 
  172.                     reason  返回信息 成功或错误原因. 
  173.                     result  返回结果,JSON格式.错误或者无返回值时为空. 
  174.  
  175.                  */  
  176.                 mCaptcha.commitCaptcha(phoneNumber, code, new ResultCallBack() {  
  177.                       
  178.                     @Override  
  179.                     public void onResult(int code, String reason, String result) {  
  180.                         // TODO Auto-generated method stub  
  181.                         if(code == 0){  
  182.                             //短信验证成功  
  183.                             Toast.makeText(MainActivity.this"验证成功!!!!!!!!", Toast.LENGTH_LONG).show();  
  184.                         }else{  
  185.                             //验证失败  
  186.                             Toast.makeText(MainActivity.this"失败!!!!!!!!" + reason, Toast.LENGTH_LONG).show();  
  187.                         }  
  188.                           
  189.                     }  
  190.                 });  
  191.                   
  192.                   
  193.                 break;  
  194.                   
  195.             case R.id.iv_sms_clear:  
  196.                   
  197.                 break;  
  198.   
  199.             default:  
  200.                 break;  
  201.             }  
  202.     }  
  203.       
  204.       
  205. }  


最后,附上demo代码的工程源码压缩包:

AndroidSMSCaptcha

Android开发之短信验证码示例

在说Android中的短信验证码这个知识点前,我们首先来了解下聚合数据 聚合数据介绍 聚合数据是一家国内最大的基础数据API提供商,专业从事互联网数据服务。免费提供从天气查询、空气质量、地图坐标到...
  • ishxiao
  • ishxiao
  • 2016年09月30日 14:06
  • 1574

android获取短信验证码并自动填写

参考资料如下,亲测很好用,哈哈: http://blog.csdn.net/kaloda2011/article/details/21032829代码如下: MainActivitypublic ...
  • jane1229
  • jane1229
  • 2016年09月12日 17:11
  • 3372

android--监听短信实现短信验证码自动填充

android中短信验证码的自动填充
  • biaobiao1217
  • biaobiao1217
  • 2016年07月08日 14:51
  • 1201

【Android短信拦截】自动填充短信验证码

注:转载请注明出处!在Android开发中,为了达到某种目的,比如为了安全性更好,有些APP需要验证码才能进行某些操作,当接收到验证码短信的时候,验证码会自动填写在输入框中,虽然是个小功能,但是会给用...
  • wangkeke1860
  • wangkeke1860
  • 2016年04月27日 15:01
  • 2372

Android如何实现获取短信验证码的功能

Android如何实现获取短信验证码的功能 连雨独饮 发表于 2015/7/5 12:59:00 | 分类标签: Android 短信 验证码 Android开发中关于短息验证码的设计层出不穷,越...
  • zw456
  • zw456
  • 2015年10月23日 17:23
  • 8827

Android之短信验证码

我们今天所使用的方案只是android手机设备集成短信验证码功能的方案之一。 我们所采用的方案是使用聚合数据的短信验证sdk。 实现步骤:...
  • bear_huangzhen
  • bear_huangzhen
  • 2015年06月25日 17:29
  • 18294

Android实战简易教程-第三十六枪(监听短信-实现短信验证码自动填入)

一般用户喜欢用手机号作为用户名注册APP账号,这时一般都是通过手机验证码的方式进行验证,下面我们就研究一个非常实用的方法,通过监听短信-实现短信验证码的自动填入,提高用户体验。 首先我们看一下如何监...
  • yayun0516
  • yayun0516
  • 2015年08月16日 09:32
  • 4140

Android 调用免费短信验证码sdk开发

最近一段时间工作上面事情比较少,就开始学习一点东西,也很长时间没有写博客,所以还是记录一下,方便自己以后需要使用的时候查找,也提供给需要的人。     开始正文     我们经常在一个app注册的时候...
  • u010153076
  • u010153076
  • 2016年11月23日 16:10
  • 2874

android 短信验证码的实现

公司用的短信验证码是Mob.com 网址:http://www.mob.com 进入网站 注册登录之后 进入后在上面有应用是让选择android还是ios 之类的,点击下载SDK --选择...
  • qq_33210042
  • qq_33210042
  • 2016年03月02日 17:36
  • 268

短信验证码60倒计时,jquery/js实现案例-短信平台验证码开发8

短信验证码发送完后, 可能会由于某些原因, 用户没有收到短信, 我们需要给用户重新发送一条。 但是需要跟上一条有一个时间间隔, 不然会有用户恶意点击, ...
  • towtotow
  • towtotow
  • 2017年11月01日 09:21
  • 347
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android之短信验证码
举报原因:
原因补充:

(最多只允许输入30个字)