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

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

程序的界面例如以下所看到的:

实现步骤:

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

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvYmVhcl9odWFuZ3poZW4=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" width="757" height="374" alt="">

2.配置project。把相关的sdk库导入到Project中去。:

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; //下一步button 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的内容来推断是否应当出现“清除全部”的buttonx
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 返回码:
server: 0 成功; 1 错误;
本地: -2 本地网络异常; -3 server网络异常;-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 返回码:
server: 0 成功; 1 错误;
本地: -2 本地网络异常; -3 server网络异常;-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代码的project源代码压缩包:

AndroidSMSCaptcha

Android之短信验证码的更多相关文章

  1. android 获取短信验证码倒计时

    android 获取短信验证码倒计时 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbWVuZ2xlbGUxMzE0/font/5a6L5L2T/fonts ...

  2. Android获取短信验证码

    Android开发中关于短息验证码的设计层出不穷,越来越多的应用为了更好的提高软件的安全性,开始使用通过服务器向用户发送验证码的方式,来保护用户个人信息的安全性.无论是用户注册时的信息验证还是当用户发 ...

  3. android发送短信验证码并自动获取验证码填充文本框

    android注册发送短信验证码并自动获取短信,截取数字验证码填充文本框. 一.接入短信平台 首先需要选择短信平台接入,这里使用的是榛子云短信平台(http://smsow.zhenzikj.com) ...

  4. 『实践』Android之短信验证码(用的Mob短信验证)

    1.参考资料 Mob网站:http://www.mob.com/ Mob在Github上的例子:https://github.com/MobClub/SMSSDK-for-Android 教程:htt ...

  5. Android学习笔记之短信验证码的获取和读取

    PS:最近很多事情都拖拖拉拉的..都什么办事效率啊!!! 还得吐槽一下移动运营商,验证码超过五次的时候,直接把我的手机号封闭.真是受够了. 学习笔记: 1.Android之如何获取短信验证码. 2.如 ...

  6. 转载:Android自动化测试- 自动获取短信验证码

    前言:android应用的自动化测试必然会涉及到注册登录功能,而许多的注册登录或修改密码功能常常需要输入短信验证码,因此有必要能够自动获得下发的短信验证码. 主要就是实时获取短信信息. android ...

  7. android自动获取短信验证码

    前言:android应用的自动化测试必然会涉及到注册登录功能,而许多的注册登录或修改密码功能常常需要输入短信验证码,因此有必要能够自动获得下发的短信验证码.主要就是实时获取短信信息.android上获 ...

  8. Android Studio精彩案例(五)《JSMS短信验证码功能实现》

    转载本专栏文章,请注明出处,尊重原创 .文章博客地址:道龙的博客 很多应用刚打开的时候,让我们输入手机号,通过短信验证码来登录该应用.那么,这个场景是怎么实现的呢?其实是很多开放平台提供了短信验证功能 ...

  9. Android自动读取短信验证码

    Android自动读取短信验证码  extends:http://www.cnblogs.com/jiayaguang/p/4366384.html,http://blog.csdn.net/yung ...

随机推荐

  1. vs2012 有效产品密钥

    VS2012 有效注册密钥 下载地址:https://www.malavida.com/en/soft/visual-studio-2012/ Microsoft Visual Studio Ulti ...

  2. python模块导入

    官方手册:https://docs.python.org/3/tutorial/modules.html 可执行文件和模块 python源代码文件按照功能可以分为两种类型: 用于执行的可执行程序文件 ...

  3. Gradle for Android(三)多渠道打包、配置签名信息

    多渠道打包 国内有太多Android App市场,每次发版几十个渠道包.还好Android Gradle给我们提供了productFlavors,我们可以对生成的APK包进行定制. productFl ...

  4. log4net日志分割,按大小分割

    最近写了一个socket通信的手表在线服务端,在日志方面,记录下Log4net日志分割 1.引入log4net.dll 2.web.config添加configsection handler 映射: ...

  5. C++ delete 两次

    转载自:http://blog.csdn.net/jxluofeng/article/details/19766801 <问题>危险的代码: int* p=new int(1);   de ...

  6. 使用matlab判断男声与女声

    (转自) http://wenku.baidu.com/view/1d55480fbe1e650e52ea99a3.html %filename:manwoman.m %different man f ...

  7. Synthesis of memory barriers

    A framework is provided for automatic inference of memory fences in concurrent programs. A method is ...

  8. selenium运行js下载文书网的文件

    from selenium import webdriver driver=webdriver.Chrome() driver.get("http://wenshu.court.gov.cn ...

  9. UVA 1604:Cubic Eight-Puzzle(模拟,BFS Grade C)

    题意: 3*3方格,有一个是空的.其他的每个格子里有一个立方体.立方体最初上下白色,前后红色,左右蓝色.移动的方式为滚.给出初态空的位置,终态上面颜色情况,问最少多少步能到达.如果超过30步不能到达, ...

  10. centos7刚安装需要的一些基础优化

    基本操作一:更改主机名 centos7有一个新的修改主机名的命令hostnamectl # hostnamectl set-hostname --static benjamin # vim /etc/ ...