我们今天所使用的方案仅仅是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. Nodejs 网络爬虫(资讯爬虫) 案例

    1. superagent superagent 是一个流行的nodejs第三方模块,专注于处理服务端/客户端的http请求.在nodejs中,我们可以使用内置的http等模块来进行请求的发送.响应处 ...

  2. webpack最佳入门实践系列(3)

    6.使用图片 6.1.尝试在css中引入图片 在src目录下新建css文件夹,并且在css文件夹下创建app.css文件,在src目录下新建images文件夹,放入一张图片,在app.css中引入这张 ...

  3. AUTOIT3设置用户包含目录

     

  4. (二十二)函数fseek() 用法

    fseek 函数名: fseek功 能: 重定位流上的文件指针用 法: int fseek(FILE *stream, long offset, int fromwhere);描 述: 函数设置文件指 ...

  5. python--jinja2

    from jinja2 import Template # 创建一个Template模板去渲染它 s = "my name is {{mashiro}}" t = Template ...

  6. 加密中的salt是啥意思

    今天在stackoverflow上查看python的md5的问题,提到,除了简单的加密外,还可以加入一点salt 啥意思?百度一下看到:(https://zhidao.baidu.com/questi ...

  7. hdu 5720(贪心+区间合并)

    Wool Time Limit: 8000/4000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others)Total Subm ...

  8. c++和G++的区别

    今天被g++坑死了.. 网上找了一段铭记:引自 http://www.cnblogs.com/dongsheng/archive/2012/10/22/2734670.html 1.输出double类 ...

  9. Guava源码学习(一)Optional

    基于版本:Guava 22.0 Wiki:Using and avoiding null 0:Optional简介 null在很多场景下会引发问题,NullPointerException困扰过无数的 ...

  10. HDU 2546.饭卡-动态规划0-1背包

    饭卡 Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submissi ...