参考:http://www.apkbus.com/blog-944804-76968.html

如何使用Rxjava发送验证码倒计时使用篇_01大酱的专栏-CSDN博客

http://wiki.mob.com/sdk-sms-android-3-0-0/

http://wiki.mob.com/sms-android-%E6%97%A0gui%E6%8E%A5%E5%8F%A3%E8%B0%83%E7%94%A8/

效果:

需要额外添加依赖:

 implementation 'com.jakewharton:butterknife:8.8.1'annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1'

代码:

package com.example.mvpfour.activity;import android.graphics.Color;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
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 com.example.mvpfour.R;import java.util.concurrent.TimeUnit;import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;
import cn.smssdk.EventHandler;
import cn.smssdk.SMSSDK;
import io.reactivex.Observable;
import io.reactivex.Observer;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.disposables.Disposable;
import io.reactivex.functions.Consumer;
import io.reactivex.functions.Function;import static cn.smssdk.SMSSDK.getSupportedCountries;
import static cn.smssdk.SMSSDK.getVerificationCode;
import static cn.smssdk.SMSSDK.submitVerificationCode;/*** Created by agen on 2018/6/23.*/public class SmsCodeActivity extends AppCompatActivity {private static final String TAG = "GsonUtils";@BindView(R.id.et_phone)EditText etPhone;@BindView(R.id.bt_getCode)Button btGetCode;@BindView(R.id.et_code)EditText etCode;@BindView(R.id.bt_verify)Button btVerify;private EventHandler eh;private Handler mHandler = new Handler() {@Overridepublic void handleMessage(Message msg) {super.handleMessage(msg);int result = msg.arg2;int event = msg.arg1;Object data = msg.obj;if (result == SMSSDK.RESULT_COMPLETE) {//回调完成//回调完成// 处理你自己的逻辑Log.d(TAG,"RESULT_COMPLETE");if (event == SMSSDK.EVENT_SUBMIT_VERIFICATION_CODE) {//提交验证码成功Log.d(TAG,"提交验证码成功-EVENT_SUBMIT_VERIFICATION_CODE" + data.toString());//客户端验证成功,可以进行注册,返回校验的手机和国家代码phone/countryToast.makeText(SmsCodeActivity.this, "提交验证码成功", Toast.LENGTH_SHORT).show();} else if (event == SMSSDK.EVENT_GET_VERIFICATION_CODE) {Log.d(TAG,"获取验证码成功-EVENT_GET_VERIFICATION_CODE" + data.toString());//获取验证码成功Toast.makeText(SmsCodeActivity.this, "获取验证码成功", Toast.LENGTH_SHORT).show();Message message = new Message();} else if (event == SMSSDK.EVENT_GET_SUPPORTED_COUNTRIES) {//返回支持发送验证码的国家列表Log.d(TAG,"EVENT_GET_SUPPORTED_COUNTRIES=" + data.toString());}} else {Toast.makeText(SmsCodeActivity.this, "验证失败", Toast.LENGTH_SHORT).show();((Throwable) data).printStackTrace();Log.d(TAG,((Throwable) data).getMessage());}}};private String phone;@Overrideprotected void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.smscode_activity);ButterKnife.bind(this);//注册回调监听,放到发送和验证前注册,注意这里是子线程需要传到主线程中去操作后续提示eh = new EventHandler() {@Overridepublic void afterEvent(int event, int result, Object data) {Message msg = new Message();msg.arg1 = event;msg.arg2 = result;msg.obj = data;mHandler.sendMessage(msg);}};SMSSDK.registerEventHandler(eh);}@OnClick({R.id.bt_getCode,R.id.bt_verify,})public void function(View view) {int id = view.getId();if (R.id.bt_getCode == id) {phone = etPhone.getText().toString().trim();if (TextUtils.isEmpty(phone)) {Toast.makeText(this, "请输入手机号", Toast.LENGTH_SHORT).show();return;}if (isMobileNO(phone)) {timeCountDown();getSupportedCountries();getVerificationCode("86", phone);} else {//手机号格式有误Toast.makeText(this, "手机号格式错误,请检查", Toast.LENGTH_SHORT).show();}} else if (R.id.bt_verify == id) {String code = etCode.getText().toString().trim();if (TextUtils.isEmpty(code)) {Toast.makeText(this, "输入验证码", Toast.LENGTH_SHORT).show();return;}//填写了验证码,进行验证Log.d(TAG,"phone="+phone);submitVerificationCode("86", phone, code);}}/*** 短信验证码倒计时* 使用Rxjava*/private void timeCountDown() {final int count = 60;Observable.interval(0, 1, TimeUnit.SECONDS).take(count + 1) //设置循环31次//进行数据转换.map(new Function<Long, Long>() {@Overridepublic Long apply(Long aLong) throws Exception {Log.d(TAG,"along=" + aLong);//aLong是原来的值0,1,2//返回倒计时的值30,29,28return count - aLong;}}).doOnSubscribe(new Consumer<Disposable>() {@Overridepublic void accept(Disposable disposable) throws Exception {Log.d(TAG,"accept");}}).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer<Long>() {@Overridepublic void onSubscribe(Disposable d) {Log.d(TAG,"onSubscribe=");}@Overridepublic void onNext(Long aLong) {btGetCode.setEnabled(false);//在发送数据的时候设置为不能点击btGetCode.setTextColor(Color.WHITE);btGetCode.setBackgroundColor(Color.GRAY);//背景色设为灰色Log.d(TAG,"onNext: " + aLong);btGetCode.setText("剩余时间" + aLong + "秒");}@Overridepublic void onError(Throwable e) {Log.d(TAG,"onError=" + e.toString());}@Overridepublic void onComplete() {Log.d(TAG,"onCompleted: ");btGetCode.setText("获取验证码");//数据发送完后设置为原来的文字btGetCode.setTextColor(Color.BLACK);btGetCode.setEnabled(true);btGetCode.setBackgroundColor(Color.parseColor("#f97e7e"));//数据发送完后设置为原来背景色}});}// 请求验证码,其中country表示国家代码,如“86”;phone表示手机号码,如“13800138000”//    SMSSDK.getVerificationCode(country, phone);// 提交验证码,其中的code表示验证码,如“1357”//    SMSSDK.submitVerificationCode(country, phone, code);protected void onStop() {super.onStop();//不能写在这里,不然查看短信后,监听短信的回调失效}@Overrideprotected void onDestroy() {super.onDestroy();//用完回调要注销掉,否则可能会出现内存泄露SMSSDK.unregisterEventHandler(eh);}private boolean isMobileNO(String phone) {/*总结起来就是第一位必定为1,第二位必定为345789,其他位置的可以为0-9*/String telRegex = "[1][345789]\\d{9}";//"[1]"代表第1位为数字1,"[358]"代表第二位可以为3、5、8中的一个,"\\d{9}"代表后面是可以是0~9的数字,有9位。if (TextUtils.isEmpty(phone))return false;elsereturn phone.matches(telRegex);}}

。。。

Android短信验证码-使用mob免费版相关推荐

  1. android 短信验证码的实现

    公司用的短信验证码是Mob.com 网址:http://www.mob.com 进入网站 注册登录之后 进入后在上面有应用是让选择android还是ios 之类的,点击下载SDK --选择免费短信验证 ...

  2. android短信验证码代码,Android短信验证码自动填写实现代码

    今天给大家分享一个Android短信验证码自动填写的功能.先看下效果图,我发送了一条短信到手机,自动填写验证码.如图: 这个小功能运用到了观察者模式,什么是观察者模式? 观察者模式 :定义对象间的一种 ...

  3. android短信验证码方案,Android之短信验证码

    今天所使用的方案只是android手机设备集成短信验证码功能的方案之一. 我们所采用的方案是使用聚合数据的短信验证sdk. 接口文档:https://www.juhe.cn/docs/api/... ...

  4. Android 短信验证码输入框

    日常开发中,我们会遇到一些很炫酷的手机短信验证码输入,但系统自带的EditText显然并不能满足所需的短信验证码输入框,因此,在系统自带的EditText基础上自定义短信验证码输入框. 实现思路是:定 ...

  5. android 短信验证码自动填写的二种方法

    转载自:https://blog.csdn.net/VirusDerekRuler/article/details/78506522 现在开发越来越注重用户体验了,现今Android基本都有短信验证功 ...

  6. Android 短信验证码自动填写

    这个也不是什么新东西,目前很多app都有这个功能,最近有几个小伙伴问我是怎么实现的,索性写一篇博客来为大家解答. 实现思路很简单:1.在需要输入验证码的Activity代码注册监听短信的广播 2.拦截 ...

  7. android短信验证码方案,Android开发之属于你的短信验证码(一)

    不飞则已,一飞冲天;不鸣则已,一鸣惊人---------司马迁 最近工作又有新需求,要求用户在注册的时候需要通过手机验证码,这样做的目的是防止用户通过一个邮箱来随便的注册,那么好,今天我们就 一起来学 ...

  8. android 短信验证码自动填写的两种方式

    https://blog.csdn.net/u010399316/article/details/48781319 https://www.01hai.com/note/av123438 https: ...

  9. Android短信验证码自动填写功能的实现

    本文出自:黄敏争的博客 前言: android应用经常会涉及到注册登录功能,而许多的注册登录或修改密码功能常常需要输入短信验证码,通常,用户收到短信需要最小化应用去查看短信再填入验证码,必然比较麻烦, ...

  10. android 验证码短信验证码,Android​短信验证码倒计时验证的2种常用方式

    前言 ​本文主要介绍的是短信验证码功能,这里总结了两种常用的方式,可以直接拿来使用. 看图 计时器 说明:这里的及时从10开始,是为了演示的时间不要等太长而修改的. 方法如下 1.第一种方式:Time ...

最新文章

  1. android调用相册和摄像头,调用Android摄像头与打开相册
  2. Hadoop概念学习系列之Java调用Shell命令和脚本,致力于hadoop/spark集群(三十六)...
  3. 分布式系统熔断机制的工作原理
  4. JAVA 判断其是否为合法标识符
  5. Codewars 开篇
  6. AsyncTask的理解
  7. reporting services订阅
  8. 讲讲OC曲线是什么?
  9. 苹果验证电子邮件地址服务器错误,苹果7P账户申请,验证电子邮件地址创建新Apple ID发生未知错误...
  10. 单片机开发,stm32开发,串口下载软件,flymcu
  11. 使用C语言gets函数和gets_s函数,读取含空格的字符串
  12. 在进入上交之后对未来的展望(第一篇博客)
  13. toolchain安装教程支持_riscv-gnu-toolchain的安装经历
  14. 服务器,Linux,centos7成功安装显卡驱动(超详细)
  15. 程序设计c语言高速公路收费标准,高速公路收费系统c语言课程设计报告分解.docx...
  16. ABAP--新语法--New Keyword in ABAP--第四天--CORRESPONDING MOVE-CORRESPONDING(DEEP) REDUCE
  17. NLP一些常见的专有名词
  18. 计算机学院姚茜,2019年东南大学计算机科学与工程学院硕士研究生拟录取名单公示...
  19. 电脑宏碁acer care center充电限值怎么第二天自动关闭
  20. OSChina 周四乱弹 —— 放过巧克力熊吧,待久了都变抹茶熊了

热门文章

  1. 海康SDK-javademo实现报错问题解决
  2. 高效沟通的方法和工具
  3. MySQL技术内幕:InnoDB存储引擎
  4. STM32 CAN波特率设置
  5. 强大的发包工具fine packet builder
  6. 神经网络matlab仿真,神经网络模型及其MATLAB仿真程序设计 周开利 等著 - 仿真模拟 - 小木虫 - 学术 科研 互动社区...
  7. java 1.4 下载_j2sdk1.4.2
  8. 业余草最新热门博客推荐
  9. 【图像去噪】基于matlab GUI均值+中值+高通低通+巴特沃斯+PCA+小波+维纳滤波图像去噪【含Matlab源码 1705期】
  10. 电商销售数据分析(Python)