实现获取验证码倒计时功能

本文将介绍如何利用JavaScript实现网页上的验证码倒计时功能。通过设置定时器更新显示剩余时间,当时间到达0时重置按钮,确保用户只能获取一次新的验证码。这个功能在注册、登录等涉及验证码验证的场景中非常常见,有效防止了恶意频繁请求验证码的行为。
package com.gaoo.countdown;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.os.CountDownTimer;
import android.support.v7.app.AppCompatActivity;
import android.telephony.SmsMessage;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
//实现短信验证码自动填写功能
public class NewActivity extends AppCompatActivity {
    private MyCount mc;
    private TextView tv;
    Button send;
    EditText mEtVerifyCode;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_new);

        mEtVerifyCode = (EditText) findViewById(R.id.et_text);
        send = (Button) findViewById(R.id.send);

        tv = (TextView)findViewById(R.id.show);

        mc = new MyCount(10000, 1000);

        send.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                mc.start();
                send.setEnabled(false);
            }
        });


    }//end func

    /*定义一个倒计时的内部类*/
    class MyCount extends CountDownTimer {
        public MyCount(long millisInFuture, long countDownInterval) {
            super(millisInFuture, countDownInterval);
        }
        @Override
        public void onFinish() {
            send.setEnabled(true);
            tv.setText("finish");
            send.setText("重新获取验证码");
        }
        @Override
        public void onTick(long millisUntilFinished) {
            tv.setText(millisUntilFinished / 1000 + " 秒后可重发");
            send.setText(millisUntilFinished / 1000 + " 秒后可重发");
          //  Toast.makeText(NewActivity.this, millisUntilFinished / 1000 + "", Toast.LENGTH_LONG).show();//toast有显示时间延迟
        }
    }


//    -------- 实现短信验证码自动填写功能------
    private SmsReciver smsReciver = new SmsReciver();
    /** 收到短信Action **/
    String ACTION_SMS_RECIVER = "android.provider.Telephony.SMS_RECEIVED";
    /**
     * 注册广播接受者监听短信验证码自动回写 可在onCreate()中进行注册;
     */
    private void registSmsReciver() {
        IntentFilter filter = new IntentFilter();
        filter.addAction(ACTION_SMS_RECIVER);
        // 设置优先级 不然监听不到短信
        filter.setPriority(1000);
        registerReceiver(smsReciver, filter);
    }

    /**
     * 短信广播接受者 用户监听短信,自动填写验证码
     */
    private class SmsReciver extends BroadcastReceiver {

        @Override
        public void onReceive(Context context, Intent intent) {
            Object[] objs = (Object[]) intent.getExtras().get("pdus");
            for (Object obj : objs) {
                byte[] pdu = (byte[]) obj;
                SmsMessage sms = SmsMessage.createFromPdu(pdu);
                // 短信的内容
                String message = sms.getMessageBody();
                Log.d("log", "message   " + message);
                // 短息的手机号,如果你们公司发送验证码的号码是固定的这里可以进行一个号码的校验
                String from = sms.getOriginatingAddress();
                Log.d("log", "from   " + from);
                analysisVerify(message);

            }
        }

    }

    /**
     * 解析短信并且回写 这里解析的是纯数字的短信,如果小伙伴的验证码包含字母的话,可用正则替换
     *
     * @param message
     */
    private void analysisVerify(String message) {
        char[] msgs = message.toCharArray();
        StringBuffer sb = new StringBuffer();
        for (int i = 0; i < msgs.length; i++) {
            if ('0' <= msgs[i] && msgs[i] <= '9') {
                sb.append(msgs[i]);
            }
        }

        mEtVerifyCode.setText(sb.toString());
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        // 取消短信广播注册
        if (smsReciver != null) {
            unregisterReceiver(smsReciver);
            smsReciver = null;
        }
    }
}
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值