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

android短信验证码方案,Android之短信验证码今天所使用的方案只是android手机设备集成短信验证码功能的方案之一。我们所采用的方案是使用聚合数据的短信验证sdk。接口文档:https://www.juhe.cn/docs/api/…程序的界面如下所示:实现步骤:1.到聚合数据官网上申请短信验证SDK数据,生成AppKey,如下图所示:2.配置工程,把相关的sdk库导入到Project中去,:3.配置AndroidManifest.xm…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

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

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

接口文档:https://www.juhe.cn/docs/api/…

程序的界面如下所示:

bVCdMg

实现步骤:

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

bVCdMr

2.配置工程,把相关的sdk库导入到Project中去,:

bVCdMx

3.配置AndroidManifest.xml文件,在Application节点中加入以下代码:

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/160014.html原文链接:https://javaforall.net

(0)
上一篇 2022年7月25日 下午6:46
下一篇 2022年7月25日 下午7:00


相关推荐

  • 公安大数据平台应用与公安大数据建模「建议收藏」

    公安大数据平台应用与公安大数据建模「建议收藏」基于沃达德大数据平台,通过对海量数据采集、处理、存储、分析和数据挖掘,根据数据的特性,采用合适的可视化方式,将数据直观地展现出来,以帮助人们认识数据、理解数据,同时找出包含在海量数据中的规律或者信息。公安大数据主要由公安业务数据、地理信息数据、互联网数据等组成。通过沃达德大数据平台,对公安大数据进行信息提取、分析、数据挖掘和可视化,用于警情时空分布和时空演化、犯罪事件热点分析、关注对象的轨迹跟踪等多个公安业务领域,全面提升公安机关的整体工作效率。沃达德公安大数据平台,利用接警数据进行警情密度分析,以大数

    2022年6月6日
    202
  • 企业微信接口文档

    企业微信接口文档企业微信开发者中心

    2026年3月18日
    1
  • Linux_Ubuntu查看磁盘空间

    Linux_Ubuntu查看磁盘空间我们可以用 df hl 命令来查看磁盘空间 参数解释 FilesystemSi Mountedon 文件系统容量已用可用已用 挂载点

    2026年3月17日
    1
  • 字节、字、位、比特的概念和关系

    字节、字、位、比特的概念和关系1 位 bit 来自英文 bit 音译为 比特 表示二进制位 位是计算机内部数据储存的最小单位 是一个 8 位二进制数 一个二进制位只可以表示 0 和 1 两种状态 21 两个二进制位可以表示 00 01 10 11 四种 22 状态 三位二进制数可表示八种状态 23 2 字节 byte 字节来自英文 Byte 音译为 拜特 习惯上用大写的 B 表示 字节是计算机中数据处理的基本单

    2026年3月18日
    1
  • chegg网站_chunked

    chegg网站_chunked服务端给浏览器发送报文时,必须告诉浏览器报文的大小,这样浏览器可以根据报文大小来判断报文的完整性以及在长连接中确定报文的截尾。但是很多服务器的报文是动态创建的,在发送之前是无法确定其大小的。服务器只有等待内容全部创建后,计算出主体的大小,才能响应客户端的请求,这样的处理方法大大延迟了响应。传输编码中的分块编码为这种困难提供了解决方案,服务器可以逐块发送主体,并说明每块的大小就可以了。HTTP协议中

    2025年8月1日
    5
  • ES6 数组新增方法

    ES6 数组新增方法目录ES6数组新增方法1、.map2、some和every方法3、filter4、数组新增的reduce方法ES6数组新增方法1、.map.map()给数组中的每一个元素添加特殊处理,返回新的数组实现给定数组添加元letprices=[20,30,40]//20元30元40元letarr=prices.map(item=>item+”元”)给给定数据替换某内容letmovies=[{id:1,name:’逃学…

    2022年5月10日
    41

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号