mob的mob短信验证码平台怎么在eclipse用

利用Mob实现免费短信验证码
招聘信息:
涉及到用户注册的App经常会涉及到短信验证码,但是对于独立开发者来说,不可能因为几百几千个用户就去购买上千成本的短信验证码服务,因此,实现免费验证码便是开发中很重要的一个诀窍。可能很多用户都已经知道Mob这个网站了,他们提供了著名的ShareSDK,还有手游录像等工具,当然也提供了本文的主角,Mob免费短信sdk。天下没有“完美的免费午餐”,因此,Mob提供的所为免费验证码,一定是有限制的,那么限制是什么呢?限制主要体现在:无法自定义短信内容、无法获知验证码具体数值。第一点,具体为Mob的短信内容固定为:[App名字]的验证码为:1234 【掌淘科技】掌淘科技估计为Mob提供这个服务所用的公司,其实这一点对于我们独立开发者来说也不是很头疼,用户大多数情况下根本不会在意验证码里面的其他提示语,只会在乎高亮的数字。但是第二点很致命,Mob的sdk是客户端sdk,也就是给ios和安卓调用,但是,只提供了一个发送方法:发送验证码(手机号) 。也就是说,具体到底发送给用户的是什么数字,我们无从知晓。我们要验证验证码只能用Mob提供的方法:验证(手机号,用户输入的验证码) &得到true或者false的结果。想象一下以下情况:用户找回密码,输入手机号,获取验证码,然后输入验证码,程序用Mob的接口进行验证,验证成功,然后进行重新设置密码。这里出现了一些问题,重新设置密码这个接口没有进行安全检验,我们希望这个后台api接口能检验一下验证码,然后再确保请求的用户是该账户的主人,进行设置密码。但是后台api无从获取验证码,客户端也无从获取,唯一获取验证码的途径是:用户的输入。因此要解决这个问题,后来我采取了如下解决方案。整个的验证码流程变成如下:1.用户输入手机号并点击发送验证码2.客户端调用sdk接口发送验证码3.用户输入验证码点击验证4.客户端将用户的手机号和输入的验证码传递给自己的服务器api接口5.api再将手机号和验证码post给mob提供的接口,如果验证成功,则将验证码记录到数据库6.客户端再将验证码传递给密码修改、用户注册接口,这时候服务器就可以根据数据库里记录的验证码进行验证对比了可能有些朋友没听懂我在说什么吧,总结一下就是,Mob没有让我们知道验证码具体内容,但是我们有时候需要知道这个验证码,以上步骤就解决了我们无法获取验证码的问题。至此,我们就可以利用Mob的短信验证码sdk完成小规模的短信验证码功能了。按照我实际的体验来看,Mob还算比较稳定,95%能够发送到达,毕竟免费。以上仅仅是个人经验,如果你的App用户较大,追求100%的稳定,还是要去购买正规短信验证码一劳永逸哦!作者:
微信扫一扫
订阅每日移动开发及APP推广热点资讯公众号:CocoaChina
您还没有登录!请或
点击量11849点击量6085点击量4479点击量3782点击量3166点击量2963点击量2915点击量2678点击量2346
&2016 Chukong Technologies,Inc.
京公网安备89& & 短信验证是现在很流行的一种验证身份的技术。用户输入手机号,短信验证平台发送验证码至用户手机,用户输入正确的收到的验证码即可验证手机身份。本文介绍引用第三方mob网站的sdk添加进入app实现短信验证功能的教程。
& & 首先在MOB网站注册账户,在后台为你的app注册获得appkey和appsecret。后下载网站的短信验证SDK,这里我下载的eclipse版本的。下载完成后将导入SDK导入eclipse,引入SDK在网站上已经有很详细的描述。按照网站叙述操作可行,或者直接将SMSSDK项目libs文件夹下的mobcommons、mobtools、smssdk的三个jar文件拷贝至本项目libs文件夹下即可。
& & 在oncreate方法中添加以下语句:
SMSSDK.initSDK(this, &你的appkey&, &你的appsecret&);& & 安卓对于网络的访问需要放在进程中实现,安卓实现的是一套异步消息处理机制,使用handler发送和处理消息。发送消息一般是使用handler的sendMessage()方法,而发出的消息经过一系列地辗转处理最终会传递到handler的handleMessage()方法。
& & 此处声明一个eventHandler作为消息处理者,为获取验证码的按钮添加监听,先判断输入号码是否正确,此处使用的方法比较过时,现在的177开头的号码会鉴定为非法号码,鉴定方法可自行修改。在验证号码正确性后使用下列语句调用SDK发送短信:
SMSSDK.getVerificationCode(&86&, phoneNums);此时建一个进程,利用进程休眠实现倒计时的功能,这里设置的时间为30秒。在30秒后恢复按钮的可点击性,可再次点击发送短信。在输入验证码后点击提交即可调用SDK验证输入验证码的正确性。
给出全部代码,页面UI可自行设计:
package com.example.
import cn.smssdk.EventH
import cn.smssdk.SMSSDK;
import android.app.A
import android.content.I
import android.os.B
import android.os.H
import android.os.M
import android.text.TextU
import android.util.L
import android.view.G
import android.view.V
import android.view.W
import android.view.View.OnClickL
import android.widget.B
import android.widget.EditT
import android.widget.FrameL
import android.widget.ProgressB
import android.widget.T
import android.widget.FrameLayout.LayoutP
public class register extends Activity implements OnClickListener {
private EditT // 手机号输入框
private EditT // 验证码输入框
private B // 获取验证码按钮
private B // 注册按钮
int i = 30; // 设置短信验证提示时间为30s
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);// 除去标题栏
setContentView(R.layout.register);
etphone = (EditText) findViewById(R.id.login_input_phone_et);
etcode = (EditText) findViewById(R.id.login_input_code_et);
btnrequest = (Button) findViewById(R.id.login_request_code_btn);
btnsub = (Button) findViewById(R.id.login_commit_btn);
btnrequest.setOnClickListener(this);
btnsub.setOnClickListener(this);
Log.e(&ms&, &1&);
// 启动短信验证sdk
SMSSDK.initSDK(this, &186af2e954049&,
&da303af399acb41f5e703&);
EventHandler eventHandler = new EventHandler() {
public void afterEvent(int event, int result, Object data) {
Message msg = new Message();
msg.arg1 =
msg.arg2 =
handler.sendMessage(msg);
SMSSDK.registerEventHandler(eventHandler); // 注册回调监听接口
public void onClick(View v) {
String phoneNums = etphone.getText().toString();
switch (v.getId()) {
case R.id.login_request_code_btn:
if (!judgePhoneNums(phoneNums)) {// 判断输入号码是否正确
SMSSDK.getVerificationCode(&86&, phoneNums); // 调用sdk发送短信验证
btnrequest.setClickable(false);// 设置按钮不可点击 显示倒计时
btnrequest.setText(&重新发送(& + i + &)&);
new Thread(new Runnable() {
public void run() {
for (i = 30; i & 0; i--) {
handler.sendEmptyMessage(-9);
if (i &= 0) {
Thread.sleep(1000);// 线程休眠实现读秒功能
} catch (InterruptedException e) {
e.printStackTrace();
handler.sendEmptyMessage(-8);// 在30秒后重新显示为获取验证码
}).start();
case R.id.login_commit_btn:
SMSSDK.submitVerificationCode(&86&, phoneNums, etcode.getText()
.toString());
createProgressBar();
Handler handler = new Handler() {
public void handleMessage(Message msg) {
if (msg.what == -9) {
btnrequest.setText(&重新发送(& + i + &)&);
} else if (msg.what == -8) {
btnrequest.setText(&获取验证码&);
btnrequest.setClickable(true); // 设置可点击
int event = msg.arg1;
int result = msg.arg2;
Object data = msg.
if (result == SMSSDK.RESULT_COMPLETE) {
// 短信注册成功后,返回MainActivity,然后提示
if (event == SMSSDK.EVENT_SUBMIT_VERIFICATION_CODE) {// 提交验证码成功
Toast.makeText(getApplicationContext(), &提交验证码成功&,
Toast.LENGTH_SHORT).show();
// 验证成功后跳转主界面
//此处可注释掉
Intent intent = new Intent(register.this, reg.class);
intent.putExtra(&flag&, &newuser&);
startActivity(intent);
Log.e(&注册&, &成功!&);
finish();// 成功跳转之后销毁当前页面
} else if (event == SMSSDK.EVENT_GET_VERIFICATION_CODE) {
Toast.makeText(getApplicationContext(), &验证码已经发送&,
Toast.LENGTH_SHORT).show();
((Throwable) data).printStackTrace();
* 判断手机号码是否合理
* @param phoneNums
private boolean judgePhoneNums(String phoneNums) {
if (isMatchLength(phoneNums, 11) && isMobileNO(phoneNums)) {
Toast.makeText(this, &手机号码输入有误!&, Toast.LENGTH_SHORT).show();
public static boolean isMatchLength(String str, int length) {
if (str.isEmpty()) {
return str.length() == length ? true :
public static boolean isMobileNO(String mobileNums) {
String telRegex = &[1][3578]\\d{9}&;// &[1]&代表第1位为数字1,&[358]&代表第二位可以为3、5、8中的一个,&\\d{9}&代表后面是可以是0~9的数字,有9位。
if (TextUtils.isEmpty(mobileNums))
return mobileNums.matches(telRegex);
private void createProgressBar() {
FrameLayout layout = (FrameLayout) findViewById(android.R.id.content);
FrameLayout.LayoutParams layoutParams = new FrameLayout.LayoutParams(
LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
layoutParams.gravity = Gravity.CENTER;
ProgressBar mProBar = new ProgressBar(this);
mProBar.setLayoutParams(layoutParams);
mProBar.setVisibility(View.VISIBLE);
layout.addView(mProBar);
protected void onDestroy() {
SMSSDK.unregisterAllEventHandler();
super.onDestroy();
& & 页面设计如下:
& & 特记下,以备后日回顾。
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:36408次
积分:1349
积分:1349
排名:千里之外
原创:98篇
转载:10篇
(1)(1)(1)(7)(4)(5)(17)(29)(23)(16)安卓日记——使用MobSDK短信验证 - 简书
安卓日记——使用MobSDK短信验证
短信注册和短信验证已经是家常便饭了,所以当然要学习如何使用SDK啦MobSDK可以免费发短信,当然就用它啦
1.首先下载sdk
2.在项目新建一个叫lib的文件夹把4个东西放进去
这里写图片描述
3.在app的build.gradule添加如下代码
repositories{
dirs 'lib' //就是你放aar的目录地址
dependencies {
//其他依赖包
compile name: 'SMSSDK-2.1.0', ext: 'aar'
compile name: 'SMSSDKGUI-2.1.0', ext: 'aar'
compile files('lib/MobCommons-26.jar')
compile files('lib/MobTools-26.jar')
4.在AndroidManifest.xml中添加权限和activity
&uses-permission android:name="android.permission.READ_CONTACTS" /&
&uses-permission android:name="android.permission.READ_PHONE_STATE" /&
&uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /&
&uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /&
&uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /&
&uses-permission android:name="android.permission.INTERNET" /&
&uses-permission android:name="android.permission.RECEIVE_SMS" /&
&uses-permission android:name="android.permission.READ_SMS" /&
&uses-permission android:name="android.permission.GET_TASKS" /&
&uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /&
在application下添加
android:name="com.mob.tools.MobUIShell"
android:theme="@android:style/Theme.Translucent.NoTitleBar"
android:configChanges="keyboardHidden|orientation|screenSize"
android:windowSoftInputMode="stateHidden|adjustResize"/&
5.开始使用
SMSSDK.initSDK(this, "您的appkey", "您的appsecret");
发送验证码
SMSSDK.getVerificationCode("86","您的手机号");
6.验证验证码
收到验证码后要post到Mob的服务器上验证首先在到官网上开通服务端验证开关
这里写图片描述
请求地址为:
请求方式: POST
应用appkey
需要验证的验证码
我已经帮你写好post的方法内容,只需传地址和参数就能返回结果
* 发起https请求
* @param address
* @param params
static String requestData(String address ,String params){
HttpURLConnection conn =
// Create a trust manager that does not validate certificate chains
TrustManager[] trustAllCerts = new TrustManager[]{new X509TrustManager(){
public X509Certificate[] getAcceptedIssuers(){}
public void checkClientTrusted(X509Certificate[] certs, String authType){}
public void checkServerTrusted(X509Certificate[] certs, String authType){}
// Install the all-trusting trust manager
SSLContext sc = SSLContext.getInstance("TLS");
sc.init(null, trustAllCerts, new SecureRandom());
//ip host verify
HostnameVerifier hv = new HostnameVerifier() {
public boolean verify(String urlHostName, SSLSession session) {
return urlHostName.equals(session.getPeerHost());
//set ip host verify
HttpsURLConnection.setDefaultHostnameVerifier(hv);
HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
URL url = new URL(address);
conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("POST");// POST
conn.setConnectTimeout(3000);
conn.setReadTimeout(3000);
//post params
if (params!=null) {
conn.setDoOutput(true);
DataOutputStream out = new DataOutputStream(conn.getOutputStream());
out.write(params.getBytes(Charset.forName("UTF-8")));
out.flush();
out.close();
conn.connect();
//get result
if (conn.getResponseCode() == HttpURLConnection.HTTP_OK) {
InputStream in=conn.getInputStream();
StringBuffer
StringBuffer();
byte[4096];
in.read(b))
out.append(new
return out.toString();
System.out.println(conn.getResponseCode() + " "+ conn.getResponseMessage());
} catch (Exception e) {
e.printStackTrace();
} finally {
if (conn != null)
conn.disconnect();
既然是网络请求当然要新建线程使用啦
new Thread(new Runnable() {
public void run() {
String params="appkey=您的phone=您的手机号;zone=86;code=手机收到的验证码";
String result = requestData("https://webapi./sms/verify",
//输出结果
System.out.println(result);
}).start();
输出结果样例
{status:200}
结果描述200
验证成功405
AppKey为空406
AppKey无效456
国家代码或手机号码为空457
手机号码格式错误466
请求校验的验证码为空467
请求校验验证码频繁(5分钟内同一个appkey的同一个号码最多只能校验三次)468
验证码错误474
没有打开服务端验证开关
不想当码农的程序员> Android文章 >
Android实现获取短信验证码(Eclipse IDE版)
作者:科迅教育&&&&&&&&发布时间:&&&&&&&&&&&&来源:网络&&&&&&&&点击:72
关注,获取更多信息!
当前很多APP都有短信验证的功能,如:帐号与手机号绑定的时候,通过短信验证的方式确认身份。那么该如何实现这个功能呢。
先简单说一下流程
第一步:获取短信验证码SDK
第二步:导入SDK
第三步:配置AndroidMainifest.xml
第四步:添加代码
首先先看一下布局界面
通过这样的界面来简单的实现短信验证的功能。
第一步:获取获取短信验证码SDK
进入Mob官网,点击SDK下载---短信验证码SDK---SMS For Android---SDK下载(Eclipse)
下载成功后,解压文件,得到ShortMessageSDKGUI和SMSSDK两个文件。
第二步:导入SDK
在eclipse中导入解压后得到的两个文件。短信SDK在Eclipse中使用项目依赖的方式完成集成。将文件倒入后,右键我们要做的项目,选择“属性”,在弹出的窗口中侧栏选择"Andriod“并且在引用中选择ShortMessageSDKGUI和SMSSDK。
注意:文件的编码格式选为 UTF-8 不然会出现各种乱码和错误。
第三步:配置AndroidMainifest.xml
添加权限:
&uses-permission android:name="android.permission.READ_CONTACTS"&
&&&&uses-permission android:name="android.permission.READ_PHONE_STATE"&
&&&&uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"&
&&&&uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"&
&&&&uses-permission android:name="android.permission.ACCESS_WIFI_STATE"&
&&&&uses-permission android:name="android.permission.INTERNET"&
&&&&uses-permission android:name="android.permission.RECEIVE_SMS"&
&&&&uses-permission android:name="android.permission.GET_TASKS"&
&&&&uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"&&/uses-permission&&/uses-permission&&/uses-permission&&/uses-permission&&/uses-permission&&/uses-permission&&/uses-permission&&/uses-permission&&/uses-permission&
第四部:添加代码
知识储备:
SMSSDK发起
EventHandler接受
1 初始化接口
所有的操作都是通过SMSSDK来发起,并通过EventHandler来接受。
1.1 initSDK
短信SDK的入口,需要传递您从ShareSDK应用管理后台中注册的应用AppKey和AppSecrete,如果填写错误,后续的操作都将不能进行。(其中的appkey和appsecret需要在Mob官网登录帐号之后,点击头像进入后台中的SecurityCodeSDK中查看。)
1.2 registerEventHandler
用来往SMSSDK中注册一个事件接收器,SMSSDK允许开发者注册任意数量的接收器,所有接收器都会在事件 被触发时收到消息。
SMSSDK.initSDK(this,APPKEY,APPSECRET);
&&&&&&&&EventHandler eh=newEventHandler(){
&&&&&&&&&&&&@Override
&&&&&&&&&&&&publicvoidafterEvent(intevent,intresult, Object data) {
&&&&&&&&&&&&&&&if(result == SMSSDK.RESULT_COMPLETE) {
&&&&&&&&&&&&&&&&//回调完成
&&&&&&&&&&&&&&&&if(event == SMSSDK.EVENT_SUBMIT_VERIFICATION_CODE) {
&&&&&&&&&&&&&&&&//提交验证码成功
&&&&&&&&&&&&&&&&}elseif(event == SMSSDK.EVENT_GET_VERIFICATION_CODE){
&&&&&&&&&&&&&&&&//获取验证码成功
&&&&&&&&&&&&&&&&}elseif(event ==SMSSDK.EVENT_GET_SUPPORTED_COUNTRIES){
&&&&&&&&&&&&&&&&//返回支持发送验证码的国家列表
&&&&&&&&&&&&&&&&}
&&&&&&&&&&&&&&}else{&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&((Throwable)data).printStackTrace();
&&&&&&&&&&}
SMSSDK.registerEventHandler(eh);//注册短信回调
1.3 unregisterEventHandler
反注册函数,registerEventHandler 必须和unregisterEventHandler配套使用,否则可能造成内存泄漏。
2.短信验证码接口
其中OnSendMessageHandler的定义如下,这个Handler的用途是在发送短信之前,开发者自己执行一个操作,来根据电话号码判断是否需要发送短信
publicinterfaceOnSendMessageHandler {
&&&&//#if def{lang} == cn
&&&&&* 此方法在发送验证短信前被调用,传入参数为接收者号码
&&&&&* 返回true表示此号码无须实际接收短信
&&&&//#elif def{lang} == en
&&&&&* This method will be called before verification message being to sent,
&&&&&* input params are the message receiver
&&&&&* return true means this number won't actually receive the message
&&&&//#endif
&&&&publicbooleanonSendMessage(String country, String phone);
2.1 getSupportedCountries
短信SDK并不能支持世界上所有国家的短信验证服务,因此我们提供了getSupportedCountries方法,在使用短信验证码功能前请调用此方法,获取当前SDK可以支持的国家列表和号码匹配规则。
2.2 getVerificationCode
getVerificationCode用于向服务器请求发送验证码的服务,需要传递国家代号和接收验证码的手机号码,支持此服务的国家代码在 getSupportedCountries中获取。
2.3 getVerificationCode
请求getVerificationCode的时间间隔不应该小于60秒,否则服务端会返回“操作过 于频繁”的错误
2.4 submitVerificationCode
submitVerificationCode用于向服务器提交接收到的短信验证码,验证成功后会通过EventHandler返回国家代码和电话号码。
****这里我们主要用到两个函数
getVerificationCode来向服务器请求发送验证码
submitVerificationCode向服务器提交接收到的短信验证码
3.Android 短信SDK操作回调
3.1注册回调:
SMSSDK.registerEventHandler(EventHandler);
3.2其中的EventHandler即为操作回调。它包括4个方法,分别为:
publicvoidonRegister();
publicvoidbeforeEvent(intevent, Object data);
publicvoidafterEvent(intevent,intresult, Object data);
publicvoidonUnregister();
3.2.1 onRegister
在回调对象注册的时候被触发。
3.2.2 beforeEvent
在操作执行前被触发,其参数event表示操作的类型,data是从外部传入的数据
3.2.3 afterEvent
在操作结束时被触发,同样具备event和data参数,但是data是事件操作结果,其具体取值根据参数result而定。result是操作结果,为SMSSDK.RESULT_COMPLETE表示操作成功,为SMSSDK.RESULT_ERROR表示操作失败。
---------------------------------------------------------------------------------割-----------------------------------------------------------------------------------------
1) 当result=SMSSDK.RESULT_ERROR,则data的类型为Throwable;如果服务器有返回错误码,那么这个Throwable的message就存放着服务器返回的json数据,你可以从中读取相关信息。示例如下:
//#if def{lang} == cn
// 根据服务器返回的网络错误,给toast提示
//#elif def{lang} == en
// show toast according to the error code
&&&&&Throwable throwable = (Throwable)
&&&&&throwable.printStackTrace();
&&&&&JSONObject object =newJSONObject(throwable.getMessage());
&&&&&String des = object.optString("detail");//错误描述
&&&&&intstatus = object.optInt("status");//错误代码
&&&&&if(status &0&& !TextUtils.isEmpty(des)) {
&&&&Toast.makeText(activity, des, Toast.LENGTH_SHORT).show();
}catch(Exception e) {
&&&&&//do something&&&&&&&&&&&&&&&&&&&&&&&&
2) 当result=SMSSDK.RESULT_COMPLETE,则data的类型如下表所示。onUnregister在被反注册的时候被触发。
短信SDK采用“广播”的方式发送操作结果。这就是说,每次调用registerEventHandler都会设置一个新的EventHandler到SDK内部,当事件发生时,这些注册进来的EventHandler都能收到信息而不会发生“后者替换前者”的问题。为了避免EventHandler注册后不再使用而造成内存泄漏,请务必在确定不使用某个EventHandler时,调用反注册代码将其注销,反注册的方法为:
SMSSDK.unregisterEventHandler(EventHandler);
在EventHandler的4个回调方法都可能不在UI线程下,因此如果要在其中执行UI操作,请务必使用Handler发送一个消息给UI线程处理。
---------------------------------------------------------------------------------割-----------------------------------------------------------------------------------------
大概的框架:
1.获取验证码按钮:
添加监听器,监听器中调用SMSSDK.getVerificationCode(String arg0, String arg1)
其中参数arg0是国家编号,arg1是手机号码
2.验证按钮:
添加监听器,监听器中调用SMSSDK.submitVerificationCode(String arg0, String arg1, String arg2);
其中参数arg0是国家编号,arg1是手机号,arg2是填写的验证码
3.onCreate()中:
3.1SMSSDK.initSDK(Context arg0, String arg1, String arg2)
3.2 新建一个EventHandler对象,实现里面的afterEvent(int event, int result, Object data)函数,来获取
最后SMSSDK.registerEventHandler(EventHandler arg0)
1.首先一定要写一个EventHandler的反注册函数。但是是需要在确定不使用这个EventHandler对象的时候,那么在这个Activity结束的时候,肯定不用了,这里覆盖: Activity 中的 onDestroy()方法,在方法中添加SMSSDK.unregisterAllEventHandler();来实现反注册。
2.这里还写了两个Handler对象,重写public void handleMessage (Message msg)放来,来获取验证信息的状态。一个对象来改变获取验证码按钮的可点击的属性,来防止获取验证码过于频繁。另一个对象获取信息后,通过返回的结果来判断是否验证成功。
------------------------------------------------------------------------------------------割-----------------------------------------------------------------------------------------------------
下面给出具体的布局文件和代码,如果有不对的地方欢迎评论。
&relativelayout android:background="@drawable/a"android:layout_height="match_parent"android:layout_width="match_parent"tools:context=".MainActivity"xmlns:android=""xmlns:tools=""&
&&&&&textview android:id="@+id/textView2"android:layout_centerhorizontal="true"android:layout_height="wrap_content"android:layout_margintop="20dp"android:layout_width="wrap_content"android:text="短信验证"android:textsize="20dp"&
&&&&&textview android:id="@+id/textView1"android:layout_alignparentleft="true"android:layout_below="@+id/textView2"android:layout_height="wrap_content"android:layout_marginleft="20dp"android:layout_margintop="20dp"android:layout_width="wrap_content"android:text="手机号:"&
&&&&&!-- 手机号 --&
&&&&&edittext android:ems="11"android:id="@+id/phone"android:inputtype="phone"android:layout_alignbaseline="@+id/textView1"android:layout_alignbottom="@+id/textView1"android:layout_height="wrap_content"android:layout_torightof="@+id/textView1"android:layout_width="wrap_content"android:maxlength="11"&
&&&&&&&&&requestfocus&
&&&&&/requestfocus&&/edittext&
&&&&&textview android:id="@+id/textView3"android:layout_alignleft="@+id/textView1"android:layout_below="@+id/phone"android:layout_height="wrap_content"android:layout_margintop="40dp"android:layout_width="wrap_content"android:text="验证码:"&
&&&&&!-- 验证码 --&
&&&&&edittext android:ems="4"android:id="@+id/cord"android:inputtype="phone"android:layout_alignbaseline="@+id/textView3"android:layout_alignbottom="@+id/textView3"android:layout_alignleft="@+id/phone"android:layout_height="wrap_content"android:layout_margintop="20dp"android:layout_width="wrap_content"android:maxlength="4"&
&&&&&!-- 获取验证码按钮 --&&button android:id="@+id/getcord"android:layout_aligntop="@+id/cord"android:layout_height="wrap_content"android:layout_marginleft="20dp"android:layout_margintop="10dp"android:layout_torightof="@+id/cord"android:layout_width="wrap_content"android:text="获取验证码"android:visibility="visible"style="?android:attr/buttonStyleSmall"&
&&&&&!-- 验证按钮 --&&/button&&button android:id="@+id/savecord"android:layout_below="@+id/cord"android:layout_height="wrap_content"android:layout_margin="20dp"android:layout_width="fill_parent"android:text="验证"&
&&&&&!-- 提示信息 --&
&&&&&textview android:gravity="center_horizontal"android:id="@+id/now"android:layout_above="@+id/savecord"android:layout_height="wrap_content"android:layout_torightof="@+id/cord"android:layout_width="fill_parent"android:text="提示信息"android:textcolor="#aaaaaa"android:visibility="gone"&
&&/textview&&/button&&/edittext&&/textview&&/textview&&/textview&&/relativelayout&
packagecom.example.
importstaticcom.mob.tools.utils.R.getStringR
importcn.smssdk.EventH
importcn.smssdk.SMSSDK;
importandroid.app.A
importandroid.os.B
importandroid.os.H
importandroid.os.M
importandroid.text.TextU
importandroid.util.L
importandroid.view.V
importandroid.view.View.OnClickL
importandroid.widget.B
importandroid.widget.EditT
importandroid.widget.TextV
importandroid.widget.T
publicclassMainActivityextendsActivityimplementsOnClickListener {
&&&&privateEditT// 手机号
&&&&privateEditT// 验证码
&&&&privateTextV// 提示信息
&&&&privateButton getC// 获取验证码按钮
&&&&privateButton saveC// 验证按钮
&&&&privateString iP
&&&&privateString iC
&&&&privateinttime =60;
&&&&privatebooleanflag =// 验证码是否正确标记
&&&&@Override
&&&&protectedvoidonCreate(Bundle savedInstanceState) {
&&&&&&&&super.onCreate(savedInstanceState);
&&&&&&&&setContentView(R.layout.activity_main);
&&&&&&&&// 获取控件
&&&&&&&&getView();
&&&&&&&&SMSSDK.initSDK(this,"f1a38",
&&&&&&&&&&&&&&&&"e091a2f650c349eb9e62425");
&&&&&&&&EventHandler eh =newEventHandler() {
&&&&&&&&&&&&@Override
&&&&&&&&&&&&publicvoidafterEvent(intevent,intresult, Object data) {
&&&&&&&&&&&&&&&&Message msg =newMessage();
&&&&&&&&&&&&&&&&msg.arg1 =
&&&&&&&&&&&&&&&&msg.arg2 =
&&&&&&&&&&&&&&&&msg.obj =
&&&&&&&&&&&&&&&&handler.sendMessage(msg);
&&&&&&&&&&&&}
&&&&&&&&};
&&&&&&&&SMSSDK.registerEventHandler(eh);
&&&&// 获取控件
&&&&privatevoidgetView() {
&&&&&&&&phone = (EditText) findViewById(R.id.phone);
&&&&&&&&cord = (EditText) findViewById(R.id.cord);
&&&&&&&&now = (TextView) findViewById(R.id.now);
&&&&&&&&getCord = (Button) findViewById(R.id.getcord);
&&&&&&&&saveCord = (Button) findViewById(R.id.savecord);
&&&&&&&&getCord.setOnClickListener(this);
&&&&&&&&saveCord.setOnClickListener(this);
&&&&@Override
&&&&publicvoidonClick(View v) {
&&&&&&&&switch(v.getId()) {
&&&&&&&&caseR.id.getcord:
&&&&&&&&&&&&if(!TextUtils.isEmpty(phone.getText().toString().trim())) {
&&&&&&&&&&&&&&&&if(phone.getText().toString().trim().length() ==11) {
&&&&&&&&&&&&&&&&&&&&iPhone = phone.getText().toString().trim();
&&&&&&&&&&&&&&&&&&&&//请求获取短信验证码 在监听中返回
&&&&&&&&&&&&&&&&&&&&SMSSDK.getVerificationCode("86", iPhone);
&&&&&&&&&&&&&&&&&&&&cord.requestFocus();
&&&&&&&&&&&&&&&&&&&&getCord.setVisibility(View.GONE);
&&&&&&&&&&&&&&&&}else{
&&&&&&&&&&&&&&&&&&&&Toast.makeText(MainActivity.this,"请输入完整电话号码",
&&&&&&&&&&&&&&&&&&&&&&&&&&&&Toast.LENGTH_LONG).show();
&&&&&&&&&&&&&&&&&&&&phone.requestFocus();
&&&&&&&&&&&&&&&&}
&&&&&&&&&&&&}else{
&&&&&&&&&&&&&&&&Toast.makeText(MainActivity.this,"请输入您的电话号码",
&&&&&&&&&&&&&&&&&&&&&&&&Toast.LENGTH_LONG).show();
&&&&&&&&&&&&&&&&phone.requestFocus();
&&&&&&&&&&&&}
&&&&&&&&&&&&
&&&&&&&&caseR.id.savecord:
&&&&&&&&&&&&if(!TextUtils.isEmpty(cord.getText().toString().trim())) {
&&&&&&&&&&&&&&&&if(cord.getText().toString().trim().length() ==4) {
&&&&&&&&&&&&&&&&&&&&iCord = cord.getText().toString().trim();
&&&&&&&&&&&&&&&&&&&&//提交短信验证码 在监听中返回
&&&&&&&&&&&&&&&&&&&&SMSSDK.submitVerificationCode("86", iPhone, iCord);
&&&&&&&&&&&&&&&&&&&&flag =
&&&&&&&&&&&&&&&&}else{
&&&&&&&&&&&&&&&&&&&&Toast.makeText(MainActivity.this,"请输入完整验证码",
&&&&&&&&&&&&&&&&&&&&&&&&&&&&Toast.LENGTH_LONG).show();
&&&&&&&&&&&&&&&&&&&&cord.requestFocus();
&&&&&&&&&&&&&&&&}
&&&&&&&&&&&&}else{
&&&&&&&&&&&&&&&&Toast.makeText(MainActivity.this,"请输入验证码", Toast.LENGTH_LONG)
&&&&&&&&&&&&&&&&&&&&&&&&.show();
&&&&&&&&&&&&&&&&cord.requestFocus();
&&&&&&&&&&&&}
&&&&&&&&&&&&
&&&&&&&&default:
&&&&&&&&&&&&
&&&&// 验证码送成功后提示文字
&&&&privatevoidreminderText() {
&&&&&&&&now.setVisibility(View.VISIBLE);
&&&&&&&&handlerText.sendEmptyMessageDelayed(1,1000);
&&&&Handler handlerText =newHandler() {
&&&&&&&&publicvoidhandleMessage(Message msg) {
&&&&&&&&&&&&if(msg.what ==1) {
&&&&&&&&&&&&&&&&if(time &0) {
&&&&&&&&&&&&&&&&&&&&now.setText("验证码已发送"+ time +"秒");
&&&&&&&&&&&&&&&&&&&&time--;
&&&&&&&&&&&&&&&&&&&&handlerText.sendEmptyMessageDelayed(1,1000);
&&&&&&&&&&&&&&&&}else{
&&&&&&&&&&&&&&&&&&&&now.setText("提示信息");
&&&&&&&&&&&&&&&&&&&&time =60;
&&&&&&&&&&&&&&&&&&&&now.setVisibility(View.GONE);
&&&&&&&&&&&&&&&&&&&&getCord.setVisibility(View.VISIBLE);
&&&&&&&&&&&&&&&&}
&&&&&&&&&&&&}else{
&&&&&&&&&&&&&&&&cord.setText("");
&&&&&&&&&&&&&&&&now.setText("提示信息");
&&&&&&&&&&&&&&&&time =60;
&&&&&&&&&&&&&&&&now.setVisibility(View.GONE);
&&&&&&&&&&&&&&&&getCord.setVisibility(View.VISIBLE);
&&&&&&&&&&&&}
&&&&&&&&};
&&&&Handler handler =newHandler() {
&&&&&&&&@Override
&&&&&&&&publicvoidhandleMessage(Message msg) {
&&&&&&&&&&&&// TODO Auto-generated method stub
&&&&&&&&&&&&super.handleMessage(msg);
&&&&&&&&&&&&intevent = msg.arg1;
&&&&&&&&&&&&intresult = msg.arg2;
&&&&&&&&&&&&Object data = msg.
&&&&&&&&&&&&Log.e("event","event="+ event);
&&&&&&&&&&&&if(result == SMSSDK.RESULT_COMPLETE) {
&&&&&&&&&&&&&&&&if(event == SMSSDK.EVENT_SUBMIT_VERIFICATION_CODE) {// 提交验证码成功,验证通过
&&&&&&&&&&&&&&&&&&&&Toast.makeText(getApplicationContext(),"验证码校验成功",
&&&&&&&&&&&&&&&&&&&&&&&&&&&&Toast.LENGTH_SHORT).show();
&&&&&&&&&&&&&&&&&&&&handlerText.sendEmptyMessage(2);
&&&&&&&&&&&&&&&&}elseif(event == SMSSDK.EVENT_GET_VERIFICATION_CODE) {// 服务器验证码发送成功
&&&&&&&&&&&&&&&&&&&&reminderText();
&&&&&&&&&&&&&&&&&&&&Toast.makeText(getApplicationContext(),"验证码已经发送",
&&&&&&&&&&&&&&&&&&&&&&&&&&&&Toast.LENGTH_SHORT).show();
&&&&&&&&&&&&&&&&}elseif(event == SMSSDK.EVENT_GET_SUPPORTED_COUNTRIES) {// 返回支持发送验证码的国家列表
&&&&&&&&&&&&&&&&&&&&Toast.makeText(getApplicationContext(),"获取国家列表成功",
&&&&&&&&&&&&&&&&&&&&&&&&&&&&Toast.LENGTH_SHORT).show();
&&&&&&&&&&&&&&&&}
&&&&&&&&&&&&}else{
&&&&&&&&&&&&&&&&if(flag) {
&&&&&&&&&&&&&&&&&&&&getCord.setVisibility(View.VISIBLE);
&&&&&&&&&&&&&&&&&&&&Toast.makeText(MainActivity.this,"验证码获取失败,请重新获取",
&&&&&&&&&&&&&&&&&&&&&&&&&&&&Toast.LENGTH_SHORT).show();
&&&&&&&&&&&&&&&&&&&&phone.requestFocus();
&&&&&&&&&&&&&&&&}else{
&&&&&&&&&&&&&&&&&&&&((Throwable) data).printStackTrace();
&&&&&&&&&&&&&&&&&&&&intresId = getStringRes(MainActivity.this,
&&&&&&&&&&&&&&&&&&&&&&&&&&&&"smssdk_network_error");
&&&&&&&&&&&&&&&&&&&&Toast.makeText(MainActivity.this,"验证码错误",
&&&&&&&&&&&&&&&&&&&&&&&&&&&&Toast.LENGTH_SHORT).show();
&&&&&&&&&&&&&&&&&&&&cord.selectAll();
&&&&&&&&&&&&&&&&&&&&if(resId &0) {
&&&&&&&&&&&&&&&&&&&&&&&&Toast.makeText(MainActivity.this, resId,
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&Toast.LENGTH_SHORT).show();
&&&&&&&&&&&&&&&&&&&&}
&&&&&&&&&&&&&&&&}
&&&&&&&&&&&&}
&&&&@Override
&&&&protectedvoidonDestroy() {
&&&&&&&&super.onDestroy();
&&&&&&&&SMSSDK.unregisterAllEventHandler();
如果您喜欢本文章请分享到:
南通科迅教育
软件开发高端职业培训中心
+ 关注 &&&&&&&+ 私信
JavaEE开发课程
开班:07月20日
大数据开发课程
开班:07月18日
Web前端开发课程
开班:07月26日
Copyright 2008-
南通科迅教育信息咨询有限公司 版权所有
联系地址:江苏省南通市人民中路23-6号新亚大厦二楼、三楼
扫一扫加入我们送视频
全国统一咨询电话0

我要回帖

更多关于 mob短信验证码demo 的文章

 

随机推荐