本人也是刚入安卓,今天学到了短信验证这一块。在平时我们接触的很多APP注册(登录)都需要短信验证,所以突然就想到写一篇博客,一来是巩固知识,方便自己查阅。二来是和大家伙们一起分享下,给需要的朋友一点自己的见解。

下面就开始表演了:

提供短信服务的很多,我用的是免费的Mob,很适合自己平时测试或者在个人的小项目中使用,但是上线前每个手机号一天有次数限制、短信内容不能自定义。

Mob官网:http://www.mob.com/

1:注册一个账号,申请App,因为我们后边会用到他的 AppKey 和 App Secret 。

2: 下载SDK , 下载很简单就不贴图了。 点击SDK下载 --> 短信验证码SDK --> 当然是选择安装了。 下载好解压后会有四个Jar包,如下图。

3:在项目libs中导入这四个Jar包,并且在build.gradle文件中添加如下代码:

repositories {flatDir {dirs 'libs'}
}compile name: 'SMSSDK-2.1.2', ext: 'aar'compile name: 'SMSSDKGUI-2.1.2', ext: 'aar'

如图:

4:然后在AndroidManifest.xml中添加如下代码 :

        <activityandroid:name="com.mob.tools.MobUIShell"android:configChanges="keyboardHidden|orientation|screenSize"android:theme="@android:style/Theme.Translucent.NoTitleBar"android:windowSoftInputMode="stateHidden|adjustResize" />

5:下面就是布局文件了: 两个EditText ,两个Button 。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context="com.example.administrator.mob_demo.MainActivity"><EditTextandroid:id="@+id/Shoujihao"android:layout_width="match_parent"android:layout_height="wrap_content"android:hint="请输入手机号"android:theme="@style/MyEdit"/><EditTextandroid:id="@+id/Yanzhengma"android:layout_width="250dp"android:layout_height="50dp"android:hint="请输入验证码"android:layout_below="@+id/Shoujihao"/><Buttonandroid:id="@+id/Huoqu"android:layout_width="150dp"android:layout_height="wrap_content"android:layout_toRightOf="@+id/Yanzhengma"android:layout_below="@+id/Shoujihao"android:text="获取验证码"/><Buttonandroid:id="@+id/Denglu"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_below="@+id/Yanzhengma"android:text="登录"/></RelativeLayout>

效果如下:

6:该MainActivity里的主代码了:

package com.example.administrator.mob_demo;import android.content.Intent;
import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import org.json.JSONObject;
import cn.smssdk.EventHandler;
import cn.smssdk.SMSSDK;public class MainActivity extends AppCompatActivity implements View.OnClickListener{private static final String TAG = "SmsYanZheng";EditText EdS;EditText EdY;Button BtnH;Button BtnD;EventHandler eventHandler;String strPhoneNumber;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);EdS = (EditText)findViewById(R.id.Shoujihao);EdY = (EditText)findViewById(R.id.Yanzhengma);BtnH = (Button)findViewById(R.id.Huoqu);BtnD = (Button)findViewById(R.id.Denglu);BtnH.setOnClickListener(this);BtnD.setOnClickListener(this);// 用到的 AppKey 和 App Secret SMSSDK.initSDK(this,"25ceca8ccd9f8" , "d07319de9b5bc043881e10e59d678589");eventHandler = new EventHandler(){/*** 在操作之后被触发* @param event  参数1* @param result 参数2 SMSSDK.RESULT_COMPLETE表示操作成功,为SMSSDK.RESULT_ERROR表示操作失败* @param data   事件操作的结果*/@Overridepublic void afterEvent(int event, int result, Object data) {Message message = myHandler.obtainMessage(0x00);message.arg1 = event;message.arg2 = result;message.obj = data;myHandler.sendMessage(message);}};SMSSDK.registerEventHandler(eventHandler);}@Overrideprotected void onDestroy() {super.onDestroy();SMSSDK.unregisterEventHandler(eventHandler);}@Overridepublic void onClick(View view) {if (view.getId() == R.id.Denglu){String strCode = EdY.getText().toString();if (null != strCode && strCode.length() == 4){Log.d(TAG , EdY.getText().toString());SMSSDK.submitVerificationCode("86",strPhoneNumber , EdY.getText().toString());}else {Toast.makeText(this ,"密码长度不正确", Toast.LENGTH_SHORT ).show();}}else if (view.getId() == R.id.Huoqu){strPhoneNumber = EdS.getText().toString();if (null == strPhoneNumber || "".equals(strPhoneNumber) || strPhoneNumber.length()!= 11 ){Toast.makeText(this, "输入电话号码有误" , Toast.LENGTH_SHORT).show();return;}SMSSDK.getVerificationCode("86" , strPhoneNumber);BtnH.setClickable(false);//开启线程去更新butto的textnew Thread(){@Overridepublic void run() {int totalTime = 60;for (int i = 0; i<totalTime; i++){Message message = myHandler.obtainMessage(0x01);message.arg1 = totalTime - i;myHandler.sendMessage(message);try {sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}}myHandler.sendEmptyMessage(0x02);}}.start();}}Handler myHandler = new Handler(){@Overridepublic void handleMessage(Message msg) {switch (msg.what){case 0x00:int event = msg.arg1;int result = msg.arg2;Object data = msg.obj;Log.e(TAG , "result:" + result +",event:" + event+ ",data:" +data);//回调  当返回的结果是completeif (result == SMSSDK.RESULT_COMPLETE){//获取验证码if (event == SMSSDK.EVENT_GET_VERIFICATION_CODE){Toast.makeText(MainActivity.this , "发送验证码成功" ,Toast.LENGTH_SHORT).show();Log.d(TAG , "get verification code successful.");}else if (event == SMSSDK.EVENT_SUBMIT_VERIFICATION_CODE){//提交验证Log.d(TAG, "submit code successful");Toast.makeText(MainActivity.this, "提交验证码成功", Toast.LENGTH_SHORT).show();Intent intent = new Intent(MainActivity.this ,SecondActivity.class);startActivity(intent);}else {Log.d(TAG, data.toString());}}else {//进行操作出错,通过下面的信息区分析错误原因try {Throwable throwable = (Throwable) data;throwable.printStackTrace();JSONObject object = new JSONObject(throwable.getMessage());String des = object.optString("detail");//错误描述int status = object.optInt("status");//错误代码Log.e(TAG ,"status:" + status + ",detail:" + des);if (status > 0 && !TextUtils.isEmpty(des)){Toast.makeText(MainActivity.this, des, Toast.LENGTH_SHORT).show();return;}} catch (Exception e) {e.printStackTrace();}}break;case 0x01:BtnH.setText("重新发送("+ msg.arg1 + ")");break;case 0x02:BtnH.setText("获取验证码");BtnH.setClickable(true);break;}}};}

Ps: 我上边定义的控件名只是为了方便,我方便看。

7:还需要一个Activity , 当你登录成功后跳转的界面,这个很简单就不贴图了。

8:最后,这是很容易遗忘的,在AndroidManifest文件中声明权限:

   <uses-permission android:name="android.permission.READ_PHONE_STATE" /><uses-permission android:name="android.permission.RECEIVE_SMS" /><uses-permission android:name="android.permission.READ_SMS" /><uses-permission android:name="android.permission.READ_CONTACTS" /><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /><uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /><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.GET_TASKS" /> 

至此就结束了,你可以用你的手机测试能不能收到短信,不过是需要网的哦。 成功的图我就不贴了,大家肯定都能做到的。

Ps: 如果有需要的朋友可以去:https://download.csdn.net/download/liu825562006/10416792 Demo里边包含Jar包。

如有问题留言,会及时回复,后边也会多写写博客,分享一点自己学到的东西,让不知道的朋友也能学习。

谢谢大家!!!

Android开发免费短信验证码SDK。相关推荐

  1. 免费短信验证码SDK是一款由移动开发服务平台Mob(前身ShareSDK)正式推出“全球短信验证码解决方案”

    免费短信验证码SDK是一款由移动开发服务平台Mob(前身ShareSDK)正式推出"全球短信验证码解决方案",正式面向开发者免费开放.方案是为开发者提供全球通用短信验证码工具,开发 ...

  2. Android深入浅出系列之Android开发环境搭建—SDK(三)

    安装SDK 1:下载SDK 只有下载了Android的,SDK(Software Development Kit)软件开发工具包,我们才能从事安卓的开发,SDK可以从Android的官方网站上下载,下 ...

  3. Android开发环境安装SDK后提示pars…

    正常安装了Eclipse,ADT,SDK都是最新的刚下载的新版,但是安装完成以后,却收到错误: parseSdkContent failed java.lang.NullPointerExceptio ...

  4. 关于android开发环境中sdk和adt更新到22.6之后多了appcompat_v7

    昨天我打开Eclipse更新了一下sdk和adt到22.6,更新一切都很顺利,很开心的样子,可以新建一个工程时发现多了一个appcompat_v7这个东西,一下子就把小编怔住了,后来才发现这是官方的一 ...

  5. Android 开发---对非SDK接口限制的适配

    前言 项目升级到Android Pie(9),需要考虑适配问题.在此做个总结. Android 9 增加了对非SDK接口访问的限制,无论你是直接访问还是通过反射,JNI等间接访问,都是会被限制的. S ...

  6. Android开发接入第三方SDK流程

    接多第三方后,慢慢感觉都是有套路可寻的.但是也有很多要注意的地方 一.SDK集成:这是最重要的,最重要的,最重要的.集成一定要把文档看完,不能因为熟而跳过,或者是快速浏览. 不能跳过的是:混淆文件定义 ...

  7. Android 开发从入门到实战

    第1章 Android开发环境搭建 本章介绍了如何在个人电脑上搭建Android开发环境,主要包括:Android开发的发展历史是怎样的. Android Studio的开发环境是如何搭建的.如何创建 ...

  8. 2022 最新 Android 基础教程,从开发入门到项目实战【b站动脑学院】学习笔记——第一章:Android开发环境搭建

    第 1 章 Android开发环境搭建 本章介绍了如何在个人电脑上搭建Android开发环境,主要包括:Android开发的发展历史是怎样的.Android Studio的开发环境是如何搭建的.如何创 ...

  9. Android开发笔记(一百零六)支付缴费SDK

    第三方支付 第三方支付指的是第三方平台与各银行签约,在买方与卖方之间实现中介担保,从而增强了支付交易的安全性.国内常用的支付平台主要是支付宝和微信支付,其中支付宝的市场份额为71.5%,微信支付的市场 ...

最新文章

  1. 模仿国外某小哥,做的一个字符串转动态linq表达式 及 部分扩展
  2. 视口和窗口的理解方法
  3. Java集合ArrayList
  4. geojson在线生成工具_logofree详解:LOGO设计在线生成
  5. 仿快图系统自带图片浏览器应用源码项目
  6. 《Python CookBook2》 第一章 文本 - 检查字符串中是否包含某字符集合中的字符 简化字符串的translate方法的使用...
  7. 研讨会 | CCF TF 第 17 期:认知计算产业化落地
  8. Excel中快速调整行高或列宽为适合内容显示的长度
  9. Optional类的使用
  10. 最火UI素材|短视频、直播APP套件,轻松搞定设计
  11. GDUFE ACM-1030
  12. Android SDK Manager 中如果没有相应的镜像ARM XX Image
  13. php代码建议,php代码优化建议
  14. 专家系统的产生和发展
  15. 云计算就业方向及前景怎么样
  16. 小鹿线前端课程怎么样
  17. png图片转化为ico图标并保留透明背景方法
  18. 用SQL表达并交差操作
  19. 三角形的内切圆和外接圆半径公式
  20. colorsys模块(RGB/HSV/HSL/YIQ)颜色模型简介

热门文章

  1. (三)给亚马逊的EC2增加磁盘空间并安装cuDNN、AutoGluon等
  2. Hybrid charging scheduling schemes for three-dimensional underwater wireless rechargeable sensor net
  3. Java基础-GUI编程讲解
  4. kubectl使用参数--kubeconfig指定不同 .kube/config 文件访问以不同集群
  5. mysql1214_mysql – #1214 – 使用的表类型不支持FULLTEXT索引
  6. 今日总结:错误码配置,关于TXT文件下载问题
  7. 2022年中国电动两轮车行业发展趋势:行业集中度不断提升,销量市场空间广阔[图]
  8. python3.6.3安装numpy_Python3.6无法安装numpy,如何解决?
  9. 海天、李锦记试水“懒人调料”,做饭神器究竟有多神?
  10. Day918.测试金字塔 -SpringBoot与K8s云原生微服务实践