我们今天所使用的方案仅仅是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. 行为型设计模式之访问者模式(Visitor)

    结构 意图 表示一个作用于某对象结构中的各元素的操作.它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作. 适用性 一个对象结构包含很多类对象,它们有不同的接口,而你想对这些对象实施一些依 ...

  2. OpenGL入门学习 教程 (五)三维的空间变换

    http://oulehui.blog.163.com/blog/static/796146982011924428755/ 在前面绘制几何图形的时候,大家是否觉得我们绘图的范围太狭隘了呢?坐标只能从 ...

  3. What does this bit-manipulating function do?

    http://stackoverflow.com/questions/8637142/what-does-this-bit-manipulating-function-do unsigned long ...

  4. 手动破解的 Linux下的Maltab 2014b

    人人网上一个很不错的东东,转发全文如下: 好久没有写日志了,今天更新一篇. 承蒙 @刘慎修(263525031 )修哥分享的各种激励,发布一发我自创的黑科技. Maltab 2014b 发布了,但是只 ...

  5. wchar_t类型的几个函数

    wchar_t是C/C++的字符数据类型,是一种扩展的字符存储方式. 在Windows下,wchar_t占2个字节(byte):在Linux下,wchar_t占4个字节 wchar_t类型主要用在国际 ...

  6. Scala学习随笔——深入类和对象

    函数化对象(又称方程化对象)指的是所定义的类或对象不包含任何可以修改的状态. 本篇随笔就是着重记录函数化对象.定义了一个有理数类定义的几个不同版本,以介绍 Scala 类定义的几个特性:类参数和构造函 ...

  7. 【转载】Photoshop-制作图片圆角2种方法

    学习网址:http://www.23ps.com/photoshop/cjjc/300002034.htm 方案一: 使用选区和蒙版相结合,用图章制作圆角选区,删除多余部分 效果: 实现步骤: 一.如 ...

  8. HDU 6240 Server(2017 CCPC哈尔滨站 K题,01分数规划 + 树状数组优化DP)

    题目链接  2017 CCPC Harbin Problem K 题意  给定若干物品,每个物品可以覆盖一个区间.现在要覆盖区间$[1, t]$. 求选出来的物品的$\frac{∑a_{i}}{∑b_ ...

  9. Git&GitHun 命令合集

    Git&GitHun 命令合集 基本操作 git --version 查看git版本信息 git add 本地库初始化 设置签名 git config user.name xxx git co ...

  10. spring jpa data笔记

    tomcat启动Maven项目的时候总抛出这样的错误: Error creating bean with name 'org.springframework.boot.autoconfigure.or ...