android手机注册登录+验证码+发送60s倒计时


划重点说下:

1.验证码
2.倒计时

1.验证码:
1.1有一个免费的发送验证码的网站
http://www.mob.com/ 注册 获得appky和appsecuret

1.2 进入android studio
首先AndroidMainfest.xml 添加许可
 <uses-permission android:name="android.permission.READ_CONTACTS" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.RECEIVE_SMS" />
    <uses-permission android:name="android.permission.GET_TASKS" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />


1.2 在点开3,添加

1.3 点4,就是用到的那个module 添加

1.4 在要用的LoginActivity中,添加

这个发送验证码的方法,只需要在onclick里面调用
这个是判断验证码是否正确的方法。
至此 验证码就结束了。
LoginActivity在后面贴出来
接下来,倒计时:
2.倒计时:


好了。

public class LoginActivity extends Activity implements View.OnClickListener {
    private EditText et_account;
    private EditText et_code;
    private TextView tv_getCode;
    private Button btn_login;
    private CheckBox mCheckBox;
    private static final String COUNTRY = "86";
    private static final int LOGIN_SUCCESS = 1;
    private static final int LOGIN_FAIL = 0;
    public static String TAG = LoginActivity.class.getCanonicalName();//测试


    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.m_login);
        init();
        initEvent();
        MobSDK.init(this);

    }

    private void init() {
        et_account = findViewById(R.id.login_accounts_value);
        et_code = findViewById(R.id.login_code_value);
        tv_getCode = findViewById(R.id.get_code);
        btn_login = findViewById(R.id.login_btn);
        mCheckBox = findViewById(R.id.is_agree_compcat);
    }

    private void initEvent() {
        tv_getCode.setOnClickListener(this);
        btn_login.setOnClickListener(this);
        mCheckBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                if (isChecked) {
                    btn_login.setBackgroundResource(R.color.main_blue);
                    btn_login.setClickable(true);
                } else {
                    btn_login.setBackgroundResource(R.color.main_disable);
                    btn_login.setClickable(false);
                }
            }
        });
    }

    @Override
    public void onClick(View v) {
        if (ValidUtil.isVaild) {
            int id = v.getId();
            String phone = et_account.getText().toString().trim();
            switch (id) {
                case R.id.get_code:
                    if (ValidUtil.isMobilePhone(phone)) {
                        sendCode(COUNTRY, phone);
                        TimeCountDown timeCountDown = new TimeCountDown(60*1000,1000);
                        timeCountDown.start();
                    } else {
                        Toast.makeText(this, "请输入正确的手机号", Toast.LENGTH_SHORT).show();
                    }
                    break;
                case R.id.login_btn:
                    String code = et_code.getText().toString().trim();
                    if (ValidUtil.isEmpty(phone)) {
                        Toast.makeText(this, "电话号码不能为空", Toast.LENGTH_SHORT).show();
                    } else if (ValidUtil.isEmpty(code)) {
                        Toast.makeText(this, "验证码不能为空", Toast.LENGTH_SHORT).show();
                    }else {
                        submitCode(COUNTRY, phone, code);
                    }

            }
        }

    }

    // 请求验证码,其中country表示国家代码,如“86”;phone表示手机号码,如“13800138000”
    public void sendCode(String country, String phone) {
        // 注册一个事件回调,用于处理发送验证码操作的结果
        SMSSDK.registerEventHandler(new EventHandler() {
            public void afterEvent(int event, int result, Object data) {
                if (result == SMSSDK.RESULT_COMPLETE) {
                    // TODO 处理成功得到验证码的结果
                    // 请注意,此时只是完成了发送验证码的请求,验证码短信还需要几秒钟之后才送达
                    Log.d("mali", "afterEvent:SMSSDK.RESULT_COMPLETE " + result);
                } else {
                    // TODO 处理错误的结果
                    Log.d("mali", "afterEvent:!= " + result);
                }
            }
        });
        // 触发操作
        SMSSDK.getVerificationCode(country, phone);
    }

    // 提交验证码,其中的code表示验证码,如“1357”
    public void submitCode(String country, String phone, String code) {
        // 注册一个事件回调,用于处理提交验证码操作的结果
        SMSSDK.registerEventHandler(new EventHandler() {
            public void afterEvent(int event, int result, Object data) {
                final Message msg = new Message();
                if (result == SMSSDK.RESULT_COMPLETE) {
                    // TODO 处理验证成功的结果
                    msg.arg1 = LOGIN_SUCCESS;
                } else {
                    // TODO 处理错误的结果
                    Log.d("mali", "afterEvent:SMSSDK.RESULT_COMPLETE " + result);
                    msg.arg1 = LOGIN_FAIL;
                }
                mHandler.sendMessage(msg);
            }
        });
        // 触发操作
        SMSSDK.submitVerificationCode(country, phone, code);
    }

    protected void onDestroy() {
        super.onDestroy();
        //用完回调要注销掉,否则可能会出现内存泄露
        SMSSDK.unregisterAllEventHandler();
    }
    private Handler mHandler = new Handler(){
        @Override
        public void handleMessage(final Message msg) {
            super.handleMessage(msg);
            int isSuccess = msg.arg1;
            if (isSuccess == LOGIN_SUCCESS){
                ConnectNet connectNet = new ConnectNet();
                String phone = et_account.getText().toString().trim();
//                storeToPhone(phone);
                connectNet.postToService("addUser",phone);
                connectNet.setResponseAction(new ConnectNet.ResponseAction() {
                    @Override
                    public void doResponseMethod(String json) {
                        msg.arg1 = LOGIN_SUCCESS;
                        Gson gson = new Gson();
                        UserBean userBean = gson.fromJson(json,UserBean.class);
                        Log.d(TAG, "doResponseMethod: "+userBean.toString());
                        storeToPhone(userBean);
                    }
                });
                Toast.makeText(LoginActivity.this, "登录成功", Toast.LENGTH_SHORT).show();
                Intent intent = new Intent(LoginActivity.this, MainActivity.class);
                startActivity(intent);
                finish();
            }else {
                Log.d(TAG, "handleMessage: "+isSuccess);
                Toast.makeText(LoginActivity.this, "验证码错误", Toast.LENGTH_SHORT).show();
            }

        }
    };
    public class TimeCountDown extends CountDownTimer {
        /**
         * @param millisInFuture    The number of millis in the future from the call
         *                          to {@link #start()} until the countdown is done and {@link #onFinish()}
         *                          is called.
         * @param countDownInterval The interval along the way to receive
         *                          {@link #onTick(long)} callbacks.
         */
        public TimeCountDown(long millisInFuture, long countDownInterval) {
            super(millisInFuture, countDownInterval);
        }

        @Override
        public void onTick(long millisUntilFinished) {
            //计时
            tv_getCode.setClickable(false);
            tv_getCode.setText(millisUntilFinished/1000+"s");
        }

        /**
         * 计时完毕
         */
        @Override
        public void onFinish() {
            tv_getCode.setText("获取验证码");
            tv_getCode.setClickable(true);
        }
    }

    /**
     * 将服务器返回的user存入sharePreference
     * @param userBean
     */
    private void storeToPhone(UserBean userBean){
        SharedPreferences sharedPreferences = getSharedPreferences("user",MODE_PRIVATE);
        SharedPreferences.Editor editor = sharedPreferences.edit();
        int userId = userBean.getId();
        String userTel = userBean.getTel();
        String iconUrl = userBean.getIconUrl();
        editor.putInt("userId",userId);
        editor.putString("userTel",userTel);
        editor.putString("iconUrl",iconUrl);
        editor.commit();
    }
}

猜你喜欢

转载自blog.csdn.net/qq_31756443/article/details/79581964