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;
}
}
}
实现获取验证码倒计时功能
最新推荐文章于 2024-03-29 17:53:02 发布
本文将介绍如何利用JavaScript实现网页上的验证码倒计时功能。通过设置定时器更新显示剩余时间,当时间到达0时重置按钮,确保用户只能获取一次新的验证码。这个功能在注册、登录等涉及验证码验证的场景中非常常见,有效防止了恶意频繁请求验证码的行为。
931

被折叠的 条评论
为什么被折叠?



