短信发送倒计时按钮封装,退出再进入可继续倒计时,绝对时间倒计时
先上图:
主要类的代码:
/**
* 用在获取短信验证码倒计时使用
*/
public class SMSCodeUtil{
private TimerUtil tUtil;
private int time;//倒计时时间
private int past_time;//已经过去了的时间
private int leave_time;//剩余的时间
private String tag;
private TextView view;
/**
* 剩余时间的key
*/
private final static String LEAVE_KEY="leave_time";
/**
* 当前时间的key
*/
private final static String NOW_KEY="now_time";
public SMSCodeUtil(TextView view,String tag,int time){
this.tag=tag;
this.past_time=Integer.parseInt((System.currentTimeMillis()-(Long)SharedPreferencesHelper.get(NOW_KEY+this.tag, 0L))/1000+"");
if(this.past_time<0){
this.past_time=0;
}
this.leave_time=(Integer)SharedPreferencesHelper.get(LEAVE_KEY+this.tag, 0)-past_time;
System.out.println("past_time="+past_time);
System.out.println("leave_time="+leave_time);
this.view=view;
this.time=time;
}
private void setTimeStart(int start){
if(tUtil==null){
tUtil=new TimerUtil(start, 0, new TimerCallBack() {
@Override
public void timerCallBack(int now, boolean alive) {
System.out.println(now);
if(alive){
SMSCodeUtilHandler.sendEmptyMessage(now);
}else{
SMSCodeUtilHandler.sendEmptyMessage(0);
}
SharedPreferencesHelper.put(LEAVE_KEY+tag, now);
SharedPreferencesHelper.put(NOW_KEY+tag, System.currentTimeMillis());
}
});
tUtil.startTimer();
}else{
tUtil.stopTimer();
tUtil=null;
setTimeStart(start);
}
}
@SuppressLint("HandlerLeak")
private Handler SMSCodeUtilHandler=new Handler(){
@Override
public void handleMessage(Message msg) {
if(msg.what==0){
view.setText("重新发送");
view.setEnabled(true);
}else{
view.setText("重新发送"+"("+msg.what+"s)");
}
}
};
public void restartTimer(){
if(leave_time>0){
if(leave_time>time){
leave_time=(Integer)SharedPreferencesHelper.get(LEAVE_KEY+this.tag, 0);
}
view.setEnabled(false);
setTimeStart(leave_time);
}
}
public void startTimer(){
view.setEnabled(false);
setTimeStart(time);
}
public void stopTimer(){
if(tUtil!=null)
tUtil.stopTimer();
}
}
倒计时封装类:
public class TimerUtil {
private Timer timer=null;
/**
* 递增还是递减的标识,0表示递减,1表示递增,默认递减
*/
private int order=0;
private int start,end;
private TimerCallBack timerCallBack;
public TimerUtil(int start,int end,TimerCallBack timerCallBack) {
this.start=start;
this.end=end;
this.timerCallBack=timerCallBack;
}
public TimerUtil(int start,int end,int order,TimerCallBack timerCallBack){
this.start=start;
this.end=end;
this.timerCallBack=timerCallBack;
this.order=order;
}
public void startTimer(){
if(timer==null){
timer=new Timer();
}
timer.schedule(new TimerTask() {
@Override
public void run() {
if(order==0){
start--;
if(start<=end){
timerCallBack.timerCallBack(start,false);
stopTimer();
}else{
timerCallBack.timerCallBack(start,true);
}
}else if(order==1){
start++;
if(start>=end){
timerCallBack.timerCallBack(start,false);
stopTimer();
}else{
timerCallBack.timerCallBack(start,true);
}
}
}
}, 0,1000);
}
public void stopTimer(){
if(timer!=null)
timer.cancel();
}
public interface TimerCallBack{
public void timerCallBack(int now,boolean alive);
}
}
调用代码:
SMSCodeUtil sUtil=new SMSCodeUtil(button, "register", REGET_SMS_CODE_TIME);
sUtil.restartTimer();
代码下载: http://download.csdn.net/download/u012800952/10050762
还没有评论,来说两句吧...