关闭

Android之短信验证码

标签: 聚合数据验证码应用界面短信
83人阅读 评论(0) 收藏 举报
分类:

我们今天所使用的方案只是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

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:338728次
    • 积分:5987
    • 等级:
    • 排名:第4209名
    • 原创:175篇
    • 转载:590篇
    • 译文:4篇
    • 评论:99条