Android 实现手机号短信验证码

使用mob第三方平台提供的免费短信验证码服务SMSSDK。
在Mob官网中注册登录并创建应用,获取相应的App key和App Secret。
在这里插入图片描述

在线安装,免下载SDK(官网介绍)

  1. 在根目录下的build.gradle文件中添加内容
    在这里插入图片描述
  2. 在app目录下的build.gradle文件中添加MobSDK插件和扩展
apply plugin: 'com.mob.sdk'MobSDK {appKey "App key"appSecret "App Secret"SMSSDK {}
}

实例

使用方法 参考MobTech文档说明
以下只可用于中国内陆,未设置区号选择,即只可用于:+86 手机号

//需要先判断输入的手机号是否已被注册(后台接口实现)
public class RegisterActivity extends BaseActivity implements View.OnClickListener {private static final String TAG = "RegisterActivity";int time = Constants.MESSAGE_COUNTDOWNTIME; //短信验证码发送倒计时private String phone;private EditText mEt_verificationCode, mEt_phone;private Button mBtn_getCode, mBtn_registerNext;private TextView mTv_sendMessage;EventHandler mEventHandler;private ImageView mIv_back;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_register);initView(); //初始化viewinitTextChanged();  //注册手机号EditText输入监听initEventHandler(); //注册监听回调事件}/*** 初始化view*/private void initView() {
//        后退mIv_back = findViewById(R.id.iv_back);mIv_back.setOnClickListener(this);
//        手机号、验证码输入框mEt_phone = findViewById(R.id.et_phone);mEt_verificationCode = findViewById(R.id.et_verificationCode);
//        获取验证码按钮mBtn_getCode = findViewById(R.id.btn_getCode);mBtn_getCode.setOnClickListener(this);mBtn_getCode.setEnabled(false); //未输入手机号,按钮不可点击
//        验证码提示信息mTv_sendMessage = findViewById(R.id.tv_sendMessage);mTv_sendMessage.setVisibility(View.INVISIBLE);
//        下一步按钮mBtn_registerNext = findViewById(R.id.btn_registerNext);mBtn_registerNext.setOnClickListener(this);}/*** 手机号输入监听*/private void initTextChanged() {mEt_phone.addTextChangedListener(new TextWatcher() {@Overridepublic void beforeTextChanged(CharSequence s, int start, int count, int after) {}@Overridepublic void onTextChanged(CharSequence s, int start, int before, int count) {}@Overridepublic void afterTextChanged(Editable s) {Log.d(TAG, "afterTextChanged: mEt_phone.getText().toString().length()==" + mEt_phone.getText().toString().length());if (mEt_phone.getText().toString().length() == 11) {mBtn_getCode.setEnabled(true);} else {mBtn_getCode.setEnabled(false);}}});}public void onClick(View v) {switch (v.getId()) {
//            “后退”点击事件case R.id.iv_back:onBackPressed();    //后退操作break;
//            "获取验证码"点击事件case R.id.btn_getCode:phone = mEt_phone.getText().toString();Log.d(TAG, "onClick: 获取验证码,phone==\" + phone");boolean result = UserUtils.validatePhone(this, phone);    //验证手机号if (!result) return;//判断网络状态mTv_sendMessage.setVisibility(View.INVISIBLE);SMSSDK.getVerificationCode("86", phone);    //请求发送验证码的服务Log.d(TAG, "onClick: 获取验证码,phone==\" + phone");break;
//                "注册"按钮点击事件case R.id.btn_registerNext:Log.d(TAG, "onClick: -注册--");mTv_sendMessage.setVisibility(View.INVISIBLE);phone = mEt_phone.getText().toString();Log.d(TAG, "onClick: phone==" + phone);boolean validate = UserUtils.validatePhone(this, phone);    //验证手机号if (validate) {SMSSDK.submitVerificationCode("86", phone, mEt_verificationCode.getText().toString());  //提交验证码}break;default:break;}}private void initEventHandler() {mEventHandler = new EventHandler() {@Overridepublic void afterEvent(int event, int result, Object data) {// TODO 此处不可直接处理UI线程,处理后续操作需传到主线程中操作Message msg = new Message();msg.arg1 = event;msg.arg2 = result;msg.obj = data;mHandler.sendMessage(msg);}};SMSSDK.registerEventHandler(mEventHandler);    //注册一个事件回调监听}Handler mHandler = new Handler() {public void handleMessage(Message msg) {// TODO Auto-generated method stubsuper.handleMessage(msg);int event = msg.arg1;int result = msg.arg2;Object data = msg.obj;Log.e("event", "event==" + event + "result==" + result);if (result == SMSSDK.RESULT_COMPLETE) {//回调完成Log.d(TAG, "handleMessage: --回调完成--");if (event == SMSSDK.EVENT_SUBMIT_VERIFICATION_CODE) {//提交验证码成功Log.d(TAG, "handleMessage: 提交验证码成功");Toast.makeText(getApplicationContext(), "验证成功", Toast.LENGTH_LONG).show();startActivity(new Intent(RegisterActivity.this, SetPasswordActivity.class));    //跳转到设置登录密码界面} else if (event == SMSSDK.EVENT_GET_VERIFICATION_CODE) {//获取验证码成功Log.d(TAG, "handleMessage: 获取验证码成功,验证码已发送");Toast.makeText(getApplicationContext(), "验证码已发送,请注意查收", Toast.LENGTH_SHORT).show();messageCountDown();    //倒计时} else if (event == SMSSDK.EVENT_GET_SUPPORTED_COUNTRIES) {//返回支持发送验证码的国家列表Log.d(TAG, "handleMessage: 获取国家列表成功");} else {Log.d(TAG, "handleMessage: 捕捉");}} else {int status = 0;try {Throwable throwable = (Throwable) data;throwable.printStackTrace();JSONObject object = new JSONObject(throwable.getMessage());status = object.optInt("status");//错误代码Log.d(TAG, "handleMessage: -回调失败--");Log.d(TAG, "handleMessage: data==" + data + " status==" + status);} catch (Exception e) {//do somethingSMSLog.getInstance().w(e);}if (status == 468) {Log.d(TAG, "handleMessage: 验证码输入错误,请重新输入");mTv_sendMessage.setText("验证码输入错误,请重新输入");mTv_sendMessage.setVisibility(View.VISIBLE);} else if (status == 466) {Log.d(TAG, "handleMessage: 验证码为空");mTv_sendMessage.setText("验证码为空");mTv_sendMessage.setVisibility(View.VISIBLE);} else if (status == 462) {mTv_sendMessage.setText("当前操作过于频繁");mTv_sendMessage.setVisibility(View.VISIBLE);} else if (status == 467) {mTv_sendMessage.setText("验证失败3次,验证码失效,请重新请求");mTv_sendMessage.setVisibility(View.VISIBLE);} else if (status == 477) {mTv_sendMessage.setText("当前手机号发送短信的数量超过限额");mTv_sendMessage.setVisibility(View.VISIBLE);} else {Log.d(TAG, "handleMessage: 错误" + status);}}}};/*** 发送短信验证码60s倒计时* millisInFuture 倒计时总时长* countDownInterval 间隔时间*/private void messageCountDown() {mBtn_getCode.setEnabled(false); //“获取验证码”按钮不可点击CountDownTimer countDownTimer = new CountDownTimer(time * 1000, 1000) {@Overridepublic void onTick(long millisUntilFinished) {Log.d(TAG, "onTick: time==" + time);mBtn_getCode.setText(time-- + "秒后再次获取");}@Overridepublic void onFinish() {mTv_sendMessage.setVisibility(View.INVISIBLE);mBtn_getCode.setText("获取验证码");mBtn_getCode.setEnabled(true);}};countDownTimer.start();}/*** 注销监听,避免内存泄露*/protected void onDestroy() {super.onDestroy();SMSSDK.unregisterEventHandler(mEventHandler);}
}

布局文件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"tools:context=".Activities.RegisterActivity"><ImageViewandroid:layout_width="106dp"android:layout_height="76dp"android:layout_marginLeft="@dimen/marginSize"android:layout_marginTop="25dp"android:src="@mipmap/logo" /><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginLeft="28dp"android:layout_marginBottom="30dp"android:text="注册账号"android:textColor="@android:color/black"android:textSize="@dimen/navBarTitleSize" /><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginTop="@dimen/marginSize"android:orientation="horizontal"><ImageViewandroid:layout_width="@dimen/inputIconSize"android:layout_height="@dimen/inputIconSize"android:layout_gravity="center"android:layout_marginLeft="@dimen/marginSize"android:layout_marginRight="@dimen/marginSize"android:src="@mipmap/phone" /><EditTextandroid:id="@+id/et_phone"android:layout_width="0dp"android:layout_height="@dimen/inputViewHeight"android:layout_weight="1"android:background="@drawable/shape_radius"android:hint="请输入手机号"android:inputType="number"android:maxLength="11"android:paddingLeft="@dimen/marginSize" /></LinearLayout><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginTop="@dimen/marginSize"android:orientation="horizontal"><ImageViewandroid:layout_width="@dimen/inputIconSize"android:layout_height="@dimen/inputIconSize"android:layout_gravity="center"android:layout_marginLeft="@dimen/marginSize"android:layout_marginRight="@dimen/marginSize"android:src="@mipmap/password" /><EditTextandroid:id="@+id/et_verificationCode"android:layout_width="0dp"android:layout_height="@dimen/inputViewHeight"android:layout_weight="1"android:background="@drawable/shape_radius"android:hint="请输入验证码"android:inputType="number"android:maxLength="6"android:paddingLeft="@dimen/marginSize" /><Buttonandroid:id="@+id/btn_getCode"android:layout_width="wrap_content"android:layout_height="match_parent"android:layout_marginRight="@dimen/marginSize"android:clickable="false"android:inputType="number"android:text="获取验证码" /></LinearLayout><TextViewandroid:id="@+id/tv_sendMessage"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginLeft="54dp"android:layout_marginTop="@dimen/paddingIconSize"android:text="验证码为空"android:textColor="@android:color/holo_red_dark"android:visibility="invisible" /><Buttonandroid:id="@+id/btn_register"style="@style/commitBtn"android:layout_marginTop="@dimen/marginSize"android:text="注  册" /></LinearLayout>

效果图:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/10390.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android手机中获取手机号码和运营商信息

代码如下&#xff1a; package com.pei.activity;import android.app.Activity; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.TextView;/*** class name&#xff1a…

Android Contacts(二)—— SMS 短信 与 Contacts 联系人关联

Android 的SMS读取短信&#xff0c;可以获取发信人/收信人的手机号码&#xff08;address&#xff09;&#xff0c;Contacts的联系人&#xff0c;可以过滤手机号码&#xff08;address&#xff09;&#xff0c;因此SMS可以通过手机号码&#xff08;address&#xff09;关联到Co…

在 Linux 终端上使用 ChatGPT, 轻松提高生产力

随着NFT和元宇宙的流行逐渐消退&#xff0c;人工智能已成为技术领域的新热词。ChatGPT及其替代品在互联网上蓬勃发展&#xff0c;帮助用户轻松完成日常任务。很多文章都介绍了如何开始制作类似ChatGPT的聊天机器人以及如何在任何浏览器中使用Bing AI等指南。但是&#xff0c;如…

大家查找医疗英文文献都去哪个网?

文献阅读是每一个医学科研人都逃脱不了且贯穿整个科研生涯的需求&#xff0c;尤其是英文文献的检索与阅读&#xff0c;我们不得不承认医疗类国际前沿与热点的文章都普遍为英文文献。那么拥有一个使用起来得心应手的文献检索网站就是非常必要的&#xff0c;毕竟巧妇难为无米之炊…

哪些平台可以查看医学类文献?

世上文献检索千千万&#xff0c;医学文献检索选哪站&#xff1f;下面我就为大家总结了8个检索医学类期刊的文献检索网站&#xff01; 目录 1. 中国知网全文数据库(CNKI) 2. 掌桥科研 3. SinoMed中国生物医学文献数据库(CBM) 4. 中华医学期刊全文数据库 5. JAMA Netw…

如何着手写一篇医学综述?

各位医学研究生&#xff0c;研0的时候是不是导师都已经把综述布置下来作为你的第一份作业呀&#xff1f;对于医学生们来说&#xff0c;不管你是本科就已经开始接触科研还是研究生开始才接触科研&#xff0c;反正在你开始阅读文献的时候开始一篇综述总是逃不过的。鉴于有综述任务…

【学习】ChatGPT对问答社区产生了哪些影响?

引用 StackExchange 社区 CEO Prashanth Chandrasekar 的一篇博客标题 “Community is the future of AI”&#xff0c;引出本文的观点&#xff0c;即ChatGPT对问答社区产生了颠覆性影响&#xff0c;问答社区必须釜底抽薪、涅槃重生&#xff0c;但我们必须坚信“社区才是AI的未…

你想要的宏基因组-微生物组知识全在这(2023.5)

欢迎点击上方蓝色”宏基因组”关注我们&#xff01; 宏基因组/微生物组是当今世界科研最热门的研究领域之一&#xff0c;为加强宏基因组学技术和成果交流传播&#xff0c;推动全球华人微生物组领域发展&#xff0c;中科院青年科研人员创立“宏基因组”公众号&#xff0c;联合海…

2023年第二十届ChinaJoy新闻发布会 十大亮点解读

5月29日&#xff0c;2023年第二十届中国国际数码互动娱乐展览会&#xff08;ChinaJoy&#xff09;新闻发布会&#xff0c;在上海浦东嘉里大酒店召开&#xff0c;宣布本届ChinaJoy将于7月28日至7月31日&#xff0c;在上海新国际博览中心举办。 中国音像与数字出版协会第一副理事…

BFT 最前线 | 王小川:2033机器智慧将超人类;扎克伯格财富暴涨;哈工大:能跳跃的昆虫机器人;北京支持“1+4”机器人领域

原创 | 文 BFT机器人 名人动态 CELEBRITY NEWS 01 王小川&#xff1a;10年后机器智慧将超过人类 年底将推出对标GPT-3.5的模型 科技预言大师雷库兹韦尔说人工智能的奇点&#xff0c;机器智慧超过人类会发生在2045年&#xff0c;王小川的判断比这更激进&#xff0c;他认为这一…

开启单细胞及空间组学行业发展黄金时代!首届国际单细胞及空间组学大会在穗闭幕

2023年4月16日&#xff0c;首届TICSSO国际单细胞及空间组学大会圆满闭幕&#xff0c;本次大会吸引了2000余位来自产、学、研、资、医、政、媒等业界人士齐聚羊城&#xff0c;注册总人数5398人&#xff0c;网络播放总量达548245人次&#xff0c;网络观看覆盖美国、德国、日本、澳…

聚集十二罗汉,探索宇宙本质,马斯克神秘的xAI

作者 | 德新编辑 | 王博 马斯克组团入局通用人工智能。 7月12日&#xff0c;马斯克发推官宣成立新的公司xAI。据官网介绍&#xff0c;这是一家试图「探索理解宇宙本质」的公司。 新公司公布了12名首批成员&#xff0c;除了马斯克外&#xff0c;他们曾经在「AlphaStar、AlphaCod…

Transformer作者:指令型智能体的构建之法

来源 | The Robot Brains PodcastOneFlow编译翻译&#xff5c;徐佳渝、贾川、杨婷2017年&#xff0c;Google发布的《Attention Is All You Need》论文提出了Transformer架构&#xff0c;这成为过去十年神经网络领域最具影响力的技术创新之一&#xff0c;并被广泛应用于NLP、计算…

华为版AIGC或于7月7日发布;350名行业大佬警告AI可能给人类带来灭绝风险;钉钉斜杠“/” 面向企业用户定向邀测丨每日大事件...

‍ ‍数据智能产业创新服务媒体 ——聚焦数智 改变商业 企业动态 欧盟官员将于6月会见OpenAI CEO&#xff1a;讨论人工智能法规 5月30日&#xff0c;欧盟官员表示&#xff0c;欧盟产业主管埃里布雷顿将于下月在旧金山与美国人工智能研究公司OpenAI首席执行官山姆阿尔特曼会面&…

大湾区年度盛会上线!院士领衔,20+重磅嘉宾,相信边缘的力量!

边缘计算&#xff0c;作为一种革命性的计算范式&#xff0c;已经引起了全球各行各业的广泛关注。在云计算、大数据、人工智能等技术的驱动下&#xff0c;边缘计算能够将计算能力下沉到数据源头&#xff0c;实现更快的响应、更高的效率、更低的成本和更强的隐私保护。据市场研究…

ACL 2023|大模型时代,自然语言领域还有什么学术增长点?

省时查报告-专业、及时、全面的行研报告库 省时查方案-专业、及时、全面的营销策划方案库 【免费下载】2023年5月份全网热门报告合集 普通人如何利用ChatGPT变现赚钱&#xff1f; 无需翻墙&#xff0c;无需注册&#xff0c;ChatGPT4直接使用 ChatGPT提词手册&#xff0c;学完工…

为AIGC敲响警钟!千亿级赛道为何成了作恶温床?

‍数据智能产业创新服务媒体 ——聚焦数智 改变商业 随着人工智能通用大模型的问世&#xff0c;全球对AIGC技术的强大潜力有了更加深刻的认识。然而&#xff0c;这也引发了诸多关于AIGC技术可信度、隐私保护以及知识产权等问题的争议&#xff0c;引起了广泛关注。 5月9日&…

Milvus应用开发实战【语义搜索】

美国总统竞选活动即将到来。 现在是回顾拜登政府上任头两年的一些演讲的好时机。 搜索一些演讲记录以了解更多关于白宫迄今为止关于某些主题的信息不是很好吗&#xff1f; 假设我们要搜索演讲的内容。 我们该怎么做&#xff1f; 我们可以使用语义搜索。 语义搜索是目前人工智能…

YC最新投资值得细琢磨!亲测爽飞的ChatGPT联网工具;阿里云大模型开启邀测;SD绘画新手入门手册 | ShowMeAI日报

&#x1f440;日报&周刊合集 | &#x1f3a1;生产力工具与行业应用大全 | &#x1f9e1; 点赞关注评论拜托啦&#xff01; &#x1f916; 『ChatGPT 恢复 Plus 订阅服务』实测&#xff0c;昨天确实巨卡 实测发现&#xff0c;OpenAI ChatGPT 已经恢复了 Plus 订阅服务&…

chatgpt赋能Python-python_theano

简介 什么是Python? Python是一种高层次、动态、解释型编程语言。它是一个易于学习且功能强大的语言&#xff0c;拥有广泛的应用领域。Python是由Guido van Rossum于1989年发明和开发的。它的设计哲学强调代码的可读性和简洁性&#xff0c;在保持语言的清晰和简洁性时&#…