Android SMSSDK短信验证及相关功能

本文详细介绍了在Android中使用SMSSDK进行短信验证的步骤,包括依赖配置、初始化、核心代码实现、手机号码规则判断,以及设置倒计时功能。通过这些步骤,开发者可以实现在App中集成短信验证功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.首先按照官网把依赖sdk...配置好:

http://www.mob.com/mobService/sms

 <!--Mob短信-->
    <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.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" />
//根目录添加:
buildscript {
    repositories {
        jcenter()
    }

    dependencies {
        ...
        classpath 'com.mob.sdk:MobSDK:+'

    }

// mode下添加插件:
apply plugin: 'com.mob.sdk'
MobSDK {
    appKey "2b44b134ebb82"
    appSecret "3d71cf2e0737081917488202679314e9"
   
    SMSSDK {
        version "3.2.1"
        gui false
    }
}

2.初始化:

	
MobSDK.init(this);

3.代码核心:

   public EventHandler eh; //事件接收器 

   //在onCreate()中初始化:
   init();
   //点击提交的时候调用此方法(提交验证):
   SMSSDK.submitVerificationCode("+86",mUsername,mCode);

   @Override
    protected void onDestroy() {
        super.onDestroy();
        SMSSDK.unregisterEventHandler(eh);//结束回收
    }

    /**
     * 初始化事件接收器:
     */
    private void init(){
        //获取输入框内容:
        getValue();
        eh = new EventHandler(){
            @Override
            public void afterEvent(int event, int result, Object data) {
                if (result == SMSSDK.RESULT_COMPLETE) { //回调完成
                    if (event == SMSSDK.EVENT_SUBMIT_VERIFICATION_CODE) { //提交验证码成功
                        Toast.makeText(LoginActivity.this, "提交验证码成功", Toast.LENGTH_SHORT).show();
                        mainApi.Username=mUsername;

                        //存储用户数据:
                        LoginVerificationBean loginVerificationBean = new LoginVerificationBean(mUsername, mainApi.token);
                        LocalDataManager.saveCurrentUser(loginVerificationBean);


                        Intent intent = new Intent(LoginActivity.this, MainActivity.class);
                        startActivity(intent);
                    }else if (event == SMSSDK.EVENT_GET_VERIFICATION_CODE){ //获取验证码成功
                        Toast.makeText(LoginActivity.this, "获取验证码成功", Toast.LENGTH_SHORT).show();
                        mobCode=SMSSDK.EVENT_GET_VERIFICATION_CODE;
                        Log.i("asdsd",mobCode+"");
                    }else if (event ==SMSSDK.EVENT_GET_SUPPORTED_COUNTRIES){ //返回支持发送验证码的国家列表
                        Toast.makeText(LoginActivity.this, "返回支持发送验证码的国家列表", Toast.LENGTH_SHORT).show();
                    }

                }else{
                    ((Throwable)data).printStackTrace();
                }
            }
        };
        SMSSDK.registerEventHandler(eh); //注册短信回调
    }

4.判断手机号规则:

  /**
     * 正则匹配手机号码:
     */
    public boolean checkTel(String tel){
        Pattern p = Pattern.compile("^[1][3,4,5,7,8][0-9]{9}$");
        Matcher matcher = p.matcher(tel);
        return matcher.matches();
    }

5.设置搜索框里的关闭按钮(懒癌患者强烈推荐):

    //设置输入框关闭:
       setImageButton(phone,login_close);
     /**
     * 检测搜索框文字状态的方法:
     */
    public void setImageButton( final EditText editText,
                                final ImageButton imageButton)
    {
        editText.addTextChangedListener( new TextWatcher()
        {
            // 输入中
            @Override
            public void onTextChanged(CharSequence arg0, int arg1, int arg2,
                                      int arg3)
            {
                setImageButtonVisiable(editText, imageButton);
            }

            // 输入前
            @Override
            public void beforeTextChanged(CharSequence arg0, int arg1,
                                          int arg2, int arg3)
            {
                setImageButtonVisiable(editText, imageButton);
            }

            // 输入后
            @Override
            public void afterTextChanged(Editable arg0)
            {
                setImageButtonVisiable(editText, imageButton);
            }
        });
    }


    /**
     * 根据EditText是否有数据判断ImageButton是否可见,有数据则可见,没有则不可见
     *
     * @param editText
     * @param imageButton
     */
    public void setImageButtonVisiable( final EditText editText,
                                        final ImageButton imageButton)
    {
        // 判断editText是否为空
        if (TextUtils.isEmpty(String. valueOf(editText.getText()).trim()))
        {
            // 如果搜索框内没有内容,imageButton设置不可见
            imageButton.setVisibility(Button. GONE);
        } else
        {
            // 如果搜索框内有内容,imageButton设置可见
            imageButton.setVisibility(Button. VISIBLE);
            imageButton.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    if (editText != null) {
                        editText.getText().clear();
                    }
                }
            });
        }
    }

6.点击发送时一个时间倒计时按钮:

 //开始计时:
 new CountTimer(login_send).start();
/**
 * Creator: huanghh;
 * Date created: 2018/12/19 19:14;
 * Description: 验证码倒计时工具
 */
public class CountTimer extends CountDownTimer {

    public static final int TIME_COUNT = 60000;//时间防止从59s开始显示(以倒计时60s为例子)
    private TextView btn;
    private String endText;

    public CountTimer(TextView btn) {
        super(TIME_COUNT, 1000);
        this.btn = btn;
        this.endText = "发送";
    }

    /**
     * @param btn     倒计时文本控件
     * @param endText 结束时显示的文字
     */
    public CountTimer(TextView btn, String endText) {
        super(TIME_COUNT, 1000);
        this.btn = btn;
        this.endText = endText;
    }

    /**
     * @param millisInFuture    倒计时总时间(如60S,120s等)
     * @param countDownInterval 渐变时间(每次倒计1s)
     * @param btn               点击的按钮(因为Button是TextView子类,为了通用我的参数设置为TextView)
     * @param endText           倒计时结束后,按钮对应显示的文字
     */
    public CountTimer(long millisInFuture, long countDownInterval, TextView btn, String endText) {
        super(millisInFuture, countDownInterval);
        this.btn = btn;
        this.endText = endText;
    }


    // 计时完毕时触发
    @Override
    public void onFinish() {
        btn.setText(endText);
        btn.setEnabled(true);
    }

    // 计时过程显示
    @Override
    public void onTick(long millisUntilFinished) {
        btn.setEnabled(false);
        btn.setText(millisUntilFinished / 1000 + " 秒");
    }
}

完结撒花。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值