Android之短信验证码

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

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

程序的界面如下所示:

实现步骤:

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

2.配置工程,把相关的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; //下一步按钮

	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

时间: 2024-10-12 22:52:30

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

android获取短信验证码并自动填写的实现一

android获取短信验证码并自动填写的实现一 android获取短信验证码并自动填写的实现一,有需要的朋友可以参考下. 现在的应用在注册登录或者修改密码中都用到了短信验证码,那在android中是如何实现获取短信验证码并自动填写的呢? 首先,需要要在manifest中注册接收和读取短信的权限: <uses-permission android:name="android.permission.RECEIVE_SMS"></uses-permission> &l

Android获取短信验证码

Android开发中关于短息验证码的设计层出不穷,越来越多的应用为了更好的提高软件的安全性,开始使用通过服务器向用户发送验证码的方式,来保护用户个人信息的安全性.无论是用户注册时的信息验证还是当用户发出找回密码请求时的短信验证,他们的工作原理大致上是一致的,因为项目的需要研究了一下关于这方面的知识,本篇我将带领大家一起实现这一当下流行的设计方案. 众所周知,短信验证需要服务器端生成一个验证码,然后发送到用户输入的手机上,这个过程需要服务器主动向客户发送验证短信,所以这是就需要一个移动或联通的发送

Android获取短信验证码倒计时

目前越来越多的app在注册或是进行对应操作时,要求获取短信验证码,在点击了获取短信验证码的按钮后,就是出现倒计时,比如倒计时120S,在倒计时期间内,按钮点击是无效的,当倒计时结束后,如果你没有获取到验证码,可以再次点击.实现倒计时的方法很多,我们今天就通过继承android.os.CountDownTimer类来实现! 首先看下我们封装的倒计时工具类,主要为了在多个地方用到的话,用了多个构造方法,就是为了使用更灵活,只要传入对数就可以调用了: public class MyCountTimer

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

android注册发送短信验证码并自动获取短信,截取数字验证码填充文本框. 一.接入短信平台 首先需要选择短信平台接入,这里使用的是榛子云短信平台(http://smsow.zhenzikj.com), 两分钟申请测试账号,赠送了100条测试短信. android使用java的jar包即可开发 jar下载: http://smsow.zhenzikj.com/doc/sdk.html API文档:http://smsow.zhenzikj.com/doc/java_sdk_doc.html 使用

Android注册短信验证码功能

一.短信验证的效果是通过使用聚合数据的SDK实现的 ,效果如下: 二.根据前一段时间的博客中输了怎么注册!注册之后找到个人中心找到申请一个应用即可! 三.根据官方文档创建项目 官方文档API下载地址:http://yunpan.cn/cZwc6mum75yYx 访问密码 9f29 (包含了项目jar的导入操作) 四.调用SDK 第一步:创建并配置工程(具体方法参见工程配置部分的介绍): 第二步:在AndroidManifest中添加开发密钥.所需权限等信息: (1)在application中添加

android 获取短信验证码倒计时

public class MainActivity extends Activity { private Button submit; private TimeCount time; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentVi

Android开发之属于你的短信验证码(一)

不飞则已,一飞冲天;不鸣则已,一鸣惊人---------司马迁 最近工作又有新需求,要求用户在注册的时候需要通过手机验证码,这样做的目的是防止用户通过一个邮箱来随便的注册,那么好,今天我们就 一起来学习一下Android中的短信验证码这一个知识点.如有谬误,欢迎批评指正,如有疑问欢迎留言,谢谢 在说这个知识点前,我们首先来了解下聚合数据 一.聚合数据介绍 聚合数据是一家国内最大的基础数据API提供商,专业从事互联网数据服务.免费提供从天气查询.空气质量.地图坐标到金融基金.电商比价.违章查询等各

Android自动读取短信验证码

Android自动读取短信验证码 extends:http://www.cnblogs.com/jiayaguang/p/4366384.html 实现自动获取手机的短信验证码,原理通过监听短信数据库的变化来解析短信,获取验证码. 直接附上代码: 1.建立一个监听数据库的类 import java.util.regex.Matcher; import java.util.regex.Pattern; import android.app.Activity; import android.data

android拓展之使用bmob后端云来实现短信验证码

bmob后端云,这个就不用我说了吧,它在我们安卓开发的过程当中非常重要.具体有哪些服务可以bmob的官网来查询 关于怎么实现短信验证码的方式,其实在bmob的后端云里面已经详细的介绍了的.我在这里最主要的是分享一下经验 1.要想实现短信验证码,必须在bmob的官网上下载短信验证码的sdk,然后导入工程 2.使用SDK,这个sdk可以单独使用,直接初始化就可以使用.那什么是单独使用呢?就是直接初始化这个SDK就可以使用,而不用初始化Bmob A.怎么初始化bmob? 通过调用Bmob.initia