Android之短信验证码

news/2024/12/23 14:55:50

今天所使用的方案只是android手机设备集成短信验证码功能的方案之一。
我们所采用的方案是使用聚合数据的短信验证sdk。
接口文档:https://www.juhe.cn/docs/api/...

程序的界面如下所示:
Center

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

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

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

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

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

import com.thinkland.sdk.util.CommonFun;  
  
import android.app.Application;  
  
public class MyApplication extends Application {  
  
    @Override  
    public void onCreate() {  
        // TODO Auto-generated method stub  
        super.onCreate();  
  
        // 在使用SDK各组件之前初始化context信息,传入ApplicationContext  
        // 注意该方法要再setContentView方法之前实现  
        /** 
         * 初始化方法 
         *  
         * @param context 
         * @needFriends 是否需要好友功能 
         */  
  
        CommonFun.initialize(getApplicationContext(), false);  
    }  
  
}  

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

import android.app.Activity;  
import android.content.pm.ActivityInfo;  
import android.os.Bundle;  
import android.text.Editable;  
import android.text.Html;  
import android.text.TextWatcher;  
import android.view.View;  
import android.view.View.OnClickListener;  
import android.widget.Button;  
import android.widget.EditText;  
import android.widget.ImageView;  
import android.widget.TextView;  
import android.widget.Toast;  
  
import com.thinkland.sdk.sms.SMSCaptcha;  
import com.thinkland.sdk.util.BaseData.ResultCallBack;  
  
public class MainActivity extends Activity implements OnClickListener{  
      
    private SMSCaptcha mCaptcha; //短信sdk主对象  
    private EditText etPhoneNum;  //手机号码输入框  
    private ImageView ivClear;  //清除已经输入内容的图标  
    private Button btnNext; //下一步按钮  
      
    private EditText etCaptchaNum; //验证码输入框  
    private Button btnSubmit; //提交验证码  
    private ImageView ivSmsClear;   
    private TextView tvUnreceiveIdentify;     
      
    private static final int RETRY_INTERVAL = 60; //设置一个倒计时时间  
    private int time = RETRY_INTERVAL;  
      
      
    @Override  
    protected void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);  
        setContentView(R.layout.activity_main);  
        initData();  
        setupViews();  
    }  
      
    private void initData(){  
        //初始化sdk主操作对象  
        mCaptcha = SMSCaptcha.getInstance();  
    }  
      
    /** 
     * 初始化界面控件 
     */  
    private void setupViews(){  
        btnNext = (Button) findViewById(R.id.btn_next);  
        ivClear = (ImageView) findViewById(R.id.iv_clear);  
        btnNext.setOnClickListener(this);  
        ivClear.setOnClickListener(this);  
          
        etCaptchaNum = (EditText) findViewById(R.id.et_sms_captcha);  
        btnSubmit = (Button) findViewById(R.id.btn_submit);  
        ivSmsClear = (ImageView) findViewById(R.id.iv_sms_clear);  
        btnSubmit.setOnClickListener(this);  
        ivSmsClear.setOnClickListener(this);  
        tvUnreceiveIdentify = (TextView) findViewById(R.id.tv_unreceive_identify);  
          
        etPhoneNum = (EditText) findViewById(R.id.et_write_phone);  
        etPhoneNum.setText("");  
        etPhoneNum.requestFocus();  
          
        etPhoneNum.addTextChangedListener(new TextWatcher() {  
              
            @Override  
            public void onTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {  
                // TODO Auto-generated method stub  
                refreshViews(arg0);  
            }  
              
            @Override  
            public void beforeTextChanged(CharSequence arg0, int arg1, int arg2,  
                    int arg3) {  
                // TODO Auto-generated method stub  
                  
            }  
              
            @Override  
            public void afterTextChanged(Editable arg0) {  
                // TODO Auto-generated method stub  
                  
            }  
        });  
    }  
      
    //根据edittext的内容来判断是否应当出现“清除所有”的按钮x  
    private void refreshViews(CharSequence s){  
        if(s.length() >0){  
            btnNext.setEnabled(true);  
            ivClear.setVisibility(View.VISIBLE);  
        }else{  
            btnNext.setEnabled(false);  
            ivClear.setVisibility(View.GONE);  
        }  
    }  
      
    //倒计时方法  
    private void countDown(){  
        new Thread(new  Runnable() {  
            public void run() {  
                while(time-- > 0){  
                    final String unReceive = MainActivity.this.getResources().getString(R.string.smssdk_receive_msg, time);  
                      
                    runOnUiThread(new Runnable() {  
                        public void run() {  
                            tvUnreceiveIdentify.setText(Html.fromHtml(unReceive));  
                            tvUnreceiveIdentify.setEnabled(false);  
                        }  
                    });  
                      
                    try {  
                        Thread.sleep(1000);  
                    } catch (Exception e) {  
                        // TODO: handle exception  
                    }  
                      
                }  
                time = RETRY_INTERVAL;  
            }  
        }).start();  
    }  
  
    @Override  
    public void onClick(View view) {  
            switch (view.getId()) {  
            case R.id.btn_next:  
                //删除掉字符串中所有的空格  
                String phone = etPhoneNum.getText().toString().trim().replace("\\s*", "");  
                  
                /** 
                 * 请求短信验证码 
                 *  
                 * code 返回码: 
                        服务器: 0 成功; 1 错误; 
                        本地: -2 本地网络异常; -3 服务器网络异常;-4 解析错误;-5初始化异常 
                    reason  返回信息 成功或错误原因. 
                    result  返回结果,JSON格式.错误或者无返回值时为空. 
 
                 */  
                mCaptcha.sendCaptcha(phone, new ResultCallBack() {  
                      
                    @Override  
                    public void onResult(int code, String reason, String result) {  
                        // TODO Auto-generated method stub  
                        if(code == 0){  
                            //调用成功  
                        }  
                    }  
                });  
                  
                countDown();  
                break;  
            case R.id.iv_clear:  
                etPhoneNum.getText().clear();  
                break;  
                  
            case R.id.btn_submit:  
                String phoneNumber = etPhoneNum.getText().toString().trim().replace("\\s*", "");  
                String code = etCaptchaNum.getText().toString().trim().replace("\\s*", "");  
                  
                /** 
                 * 验证短信验证码 
                 *  
                 * code 返回码: 
                        服务器: 0 成功; 1 错误; 
                        本地: -2 本地网络异常; -3 服务器网络异常;-4 解析错误;-5初始化异常 
                    reason  返回信息 成功或错误原因. 
                    result  返回结果,JSON格式.错误或者无返回值时为空. 
 
                 */  
                mCaptcha.commitCaptcha(phoneNumber, code, new ResultCallBack() {  
                      
                    @Override  
                    public void onResult(int code, String reason, String result) {  
                        // TODO Auto-generated method stub  
                        if(code == 0){  
                            //短信验证成功  
                            Toast.makeText(MainActivity.this, "验证成功!!!!!!!!", Toast.LENGTH_LONG).show();  
                        }else{  
                            //验证失败  
                            Toast.makeText(MainActivity.this, "失败!!!!!!!!" + reason, Toast.LENGTH_LONG).show();  
                        }  
                          
                    }  
                });  
                  
                  
                break;  
                  
            case R.id.iv_sms_clear:  
                  
                break;  
  
            default:  
                break;  
            }  
    }  
      
      
}  

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


http://www.niftyadmin.cn/n/2087622.html

相关文章

php中的error_handler

一般我们为了捕获php的错误&#xff0c;需要自己设置error_handler&#xff0c;但是&#xff0c;如果error_handler里出错了&#xff0c;可能会形成递归调用。事实上这个问题根本不存在&#xff0c;因为php在出错以后调用了zend_error函数&#xff0c;然后这个函数里会判断EG(u…

NumPy基础学习笔记

目录一、NumPy简介与安装使用介绍1.1 NumPy的简介1.2 Numpy的安装与使用1.3 NumPy常用数据类型介绍二、NumPy数组与矩阵的创建2.1 NumPy基本数组的创建2.1.1 一维数组的创建2.1.2 二维及高维数组的创建2.1.3 添加、删除和排序元素2.1.4 重塑阵列2.1.5 如何向数组中添加新的轴2.…

一个编译debug版本的mysql的脚本

#!/bin/sh #设置安装目录 MYSQL_HOME/home/mysql/install/ddb if [ -z $MYSQL_HOME ]; then echo "mysql_home should be set" exit -1 fi #为防止-O参数导致的gdb行数错乱&#xff0c;将其暂时禁掉 sed -i -r "s/-O[0-9]?/b//g" configure #任何一步执行…

学习笔记十二 : squid

一 squid简介二 squid 安装配置三 案例转载于:https://blog.51cto.com/chenwei/1841972

工作中电子邮件的技巧

虽然电子邮件的使用几乎遍及全球&#xff0c;但并非人人都懂得如何正确使用。以下的使用指南&#xff0c;内容将涵盖邮件礼节以及如何处理邮件等方面。这些内容能够帮助你的用户学会如何安全可靠地操作邮件。 1. 管好你的收件箱 把邮件消息按照优先级、主题、日期、发件人及其…

在CentOS6.8上编译安装apache+php+mariadb(整理版)

在CentOS6.8上编译安装apachephpmariadb参考文档&#xff1a; http://www.cnblogs.com/dreamhome/p/4967903.html使用wget或git下载源码速度很慢&#xff0c;使用迅雷下载会比快很多 bison和cmake安装顺序网上的参考教程列出的下载地址部分失效&#xff0c;需要到官方网站重新…

让你的vmware跑的更快!

windows环境下&#xff0c;文本编辑器打开虚拟机的vmx文件&#xff0c;在第二行添加一行&#xff1a; mainmem.usenamedfile"false" 意思是优先使用物理内存而不是硬盘虚拟内存。 如果是mac os x环境下的fusion下选择高级&#xff0d;其他&#xff0d;硬盘缓冲&…

GIS实验之制作行政区划图

数据描述&#xff1a;提供山东省的基础地理信息数据问题描述&#xff1a;基于这些数据制作行政区划图 形式内容不限&#xff0c;从可视化的角度出发&#xff1b;如果是标准地图&#xff0c;需要遵循地图学的制图原则&#xff1b;如果是可视化示意图&#xff0c;可以不考虑某些制…