注册验证码倒计时(含源码)
来源:互联网 发布:淘宝流量统计工具叫啥 编辑:程序博客网 时间:2024/05/14 17:30
账号注册是一个APP的首要任务,账号注册一般都要用到短信验证,而短信验证一般都需要一个60S倒计时,下面为大家分享一个倒计时服务!首先自定义一个CountDownTimer,控制时长;直接上代码:public class RegisterCodeTimer extends CountDownTimer { private static Handler mHandler; public static final int IN_RUNNING = 1001; public static int END_RUNNING = 1002; public long mMillisUntilFinished = 0; /** * @param millisInFuture // 倒计时的时长 * @param countDownInterval // 间隔时间 * @param handler // 通知进度的Handler */ public RegisterCodeTimer(long millisInFuture, long countDownInterval, Handler handler) { super(millisInFuture, countDownInterval); mMillisUntilFinished = millisInFuture; mHandler = handler; } // 结束 @Override public void onFinish() { mMillisUntilFinished = -1; // TODO Auto-generated method stub if (mHandler != null) mHandler.obtainMessage(END_RUNNING, "重新发送").sendToTarget(); } @Override public void onTick(long millisUntilFinished) { // TODO Auto-generated method stub mMillisUntilFinished = millisUntilFinished; if (mHandler != null) mHandler.obtainMessage(IN_RUNNING, (millisUntilFinished / 1000) + "s 后重新发送").sendToTarget(); }}接下来倒计时即便界面关闭了,倒计时依然要进行,所以需要通过Service来实现,自定义RegisterCodeTimerService,继承Service;代码如下:public class RegisterCodeTimerService extends Service { private static int DEFAULT_TIME = 30000; private static Intent mIntent; private static Handler mHandler; private static RegisterCodeTimer mCodeTimer; private static View mSendCodeView; /** * 获取用来倒计时的具体实例 * 就是一个线程 * * @return */ public static RegisterCodeTimer getRegisterCodeTimer() { return mCodeTimer; } public static void startService(Activity activity, int beginBackgroundRes) { getIntent(activity); mSendCodeView.setEnabled(false); mSendCodeView.setBackgroundResource(beginBackgroundRes); activity.startService(mIntent); } /** * 获取这个服务中的Intent * * @param context * @return */ private static Intent getIntent(Context context) { if (mIntent == null) { mIntent = new Intent(context, RegisterCodeTimerService.class); } return mIntent; } /** * 设置停止倒计时 */ public static void onActivityFinish() { if (mCodeTimer != null) { mCodeTimer.cancel(); } } @Override public IBinder onBind(Intent intent) { // TODO Auto-generated method stub return null; } @Override public void onCreate() { // TODO Auto-generated method stub super.onCreate(); } @SuppressWarnings("deprecation") @Override public void onStart(Intent intent, int startId) { // TODO Auto-generated method stub super.onStart(intent, startId); mCodeTimer = new RegisterCodeTimer(DEFAULT_TIME, 1000, mHandler); mCodeTimer.start(); } @Override public int onStartCommand(Intent intent, int flags, int startId) { // TODO Auto-generated method stub return super.onStartCommand(intent, flags, startId); } @Override public void onDestroy() { // TODO Auto-generated method stub mCodeTimer.onFinish(); super.onDestroy(); } /** * 设置要进行倒计时的控件 * * @param view 具体倒计时的控件 * @param endTimeBackgroundRes 结束倒计时后的背景资源 */ public static void setCountDownView(View view, final int endTimeBackgroundRes) { if (view instanceof TextView) { final TextView textView = (TextView) view; mSendCodeView = textView; /** * 倒计时Handler */ mHandler = new Handler() { public void handleMessage(Message msg) { if (msg.what == RegisterCodeTimer.IN_RUNNING) {// 正在倒计时 textView.setText(msg.obj.toString()); textView.setBackgroundResource(R.drawable.bg_blue_fillet); } else if (msg.what == RegisterCodeTimer.END_RUNNING) {// 完成倒计时 textView.setEnabled(true); textView.setText(msg.obj.toString()); textView.setBackgroundResource(endTimeBackgroundRes); } } }; } } /** * 设置要倒计时的时间 * * @param time */ public static void setCountDownTime(int time) { DEFAULT_TIME = time; }}然后就是使用了:第一步:去清单文件注册Service;<!-- 倒计时的Service --> <service android:name=".service.RegisterCodeTimerService" android:enabled="true" /> 第二步:设置要倒计时的控件,控件的背景色,倒计时时长; RegisterCodeTimerService.setCountDownTime(60000); RegisterCodeTimerService.setCountDownView(mDataBinding.registerBtnCode, R.drawable.bg_blue_fillet); 第三步:在需要开启倒计时的地方,调用RegisterCodeTimerService中的startService方法,并设置倒计时开始控件的背景色; RegisterCodeTimerService.startService(RegisterActivity.this, R.drawable.bg_blue_fillet); 第四步:当页面消失的时候需要调用onActivityFinish(); @Override protected void onDestroy() { super.onDestroy(); RegisterCodeTimerService.onActivityFinish(); } PS:一定不能忘了注册Service哦; [源码下载地址](https://github.com/lvqingfeng/Lightning/blob/master/app/src/main/java/com/lightningfast/service/RegisterCodeTimerService.java "源码")
阅读全文
0 0
- 注册验证码倒计时(含源码)
- 注册帐号时发送验证码倒计时
- android 注册、获取验证码倒计时类
- 注册获取验证码倒计时DEMO
- 手机号码注册带正则验证和发验证码倒计时
- 三层架构(MVC)实现简单登陆注册验证(含验证码)
- c# 验证码识别基础类(含源码)
- binbinyang-----Android获取验证码后倒计时程序--注册模块
- Android中注册、找回密码等发送验证码倒计时
- 注册页面 , 验证码倒计时代码的实现
- 手机注册登录时,获取验证码之后倒计时
- 注册登录页面的获取验证码倒计时
- JSP基本注册登录系统(含验证码)
- 注册时手机获取验证码倒计时,使用CountDownTimer类轻松实现倒计时功能
- java实现登录窗口(含验证码验证、账户注册等)
- 一个很COOL的图片验证码程序[含源码]
- MyEclipse+JSP+SqlServer登录验证图文教程(含源码)
- MyEclipse+Struts2登录验证(含工程源码)
- 老徐讲解小程序与微信第三方平台及微信官方的关系。
- 交换机设置环路导致网络瘫痪
- IAR切BANK--命令连接器文件xcl格式说明
- 如何在intellij 的终端(terminal) 使用git命令
- Git入门
- 注册验证码倒计时(含源码)
- Map与HashMap,Hashtable,HashSet的区别
- 矩阵相乘Strassen算法Java实现
- TCP/IP协议族【 17章 应用层简介socket demo及抓包分析】
- 正则表达式的几个方法使用的个人笔记
- sqluldr2导数据
- GreenDAO的简单应用
- 类的开头,自己学习总结
- oracle常用函数及示例