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

来源:互联网 发布:傻瓜音乐剪辑软件 编辑:程序博客网 时间:2024/05/18 00:01
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;        }    }}
0 0