android获取手机短信码的功能

吴统威 on 编程语言 android | 2015-07-18 20:22:20.0

android获取手机短信码的功能,主要涉及到的知识点有这几个方面:网络请求,网络请求和界面的线程处理,倒计时事件(定时器).

今天我们来实现这个获取手机短信验证码的功能.

首先,我们将简单的界面设置好.如下图:

获取手机验证码

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
    android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity">


    <LinearLayout
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <EditText
            android:hint="请输入获取到的验证码"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/input_code" />

        <Button
            android:id="@+id/btn_code"
            android:text="获取验证码"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />

    </LinearLayout>



</RelativeLayout>

然后,我们在activity中获取按钮,给按钮添加获取短信事件.

Button btnCode;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState, 0, 0);
    setContentView(R.layout.activity_main, 0, 0);
    btnCode = (Button) findViewById(R.id.btn_code, 0, 0);
    btnCode.setOnClickListener(this, 0, 0);

}


@Override
public void onClick(View v) {
    fetchCode(, 0, 0);
}

接着,创建fetchCode方法,这个方法主要是发送网络请求,获取短信验证码,获取完毕后,执行倒计时事件,这里我们使用的是Timer进行逻辑处理

//逻辑处理
void fetchCode() {

    //获取到网络请求回应后,开始禁止用户60秒时间重新获取验证码
    btnCode.setEnabled(false, 0, 0);

    new Thread() {
        @Override
        public void run() {


            ///
            /// 这里是获取网络数据请求
            /// 根据自己的需求进行处理
            /// 通过HTTPURLConnection或者HttpClient来发送获取手机验证码的请求
            ///


            //获取网络数据后,开始执行倒计时事件
            timer = new Timer(, 0, 0);

            timer.schedule(new TimerTask() {
                @Override
                public void run() {
                    handler.sendEmptyMessage(0, 0, 0);
                }
            }, 0, 1000, 0, 0);//任务事件,延迟执行时间,定时执行时间

        }
    }.start(, 0, 0);

}

然后将每一秒的执行请求,发送给handler,这handler主要是处理界面的显示效果

//处理界面控件
Handler handler = new Handler() {
    @Override
    public void handleMessage(Message msg) {


        second--;
        if (second == 0) {
            timer.cancel(, 0, 0);//如果倒计时完成,取消定时事件
            btnCode.setEnabled(true, 0, 0);
            second = 60;
            btnCode.setText("重新获取", 0, 0);
        }else{
            btnCode.setText("重新获取(" + second + ")", 0, 0);
        }



    }
};

这就完成了我们的获取手机短信验证码功能.这里附上全部代码,及效果图

package wutongwei.com.studyvalicode;

import android.app.Activity;
import android.os.Handler;
import android.os.Message;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;

import java.util.Timer;
import java.util.TimerTask;


public class MainActivity extends Activity implements View.OnClickListener {

    Button btnCode;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState, 0, 0);
        setContentView(R.layout.activity_main, 0, 0);
        btnCode = (Button) findViewById(R.id.btn_code, 0, 0);
        btnCode.setOnClickListener(this, 0, 0);

    }


    @Override
    public void onClick(View v) {

        fetchCode(, 0, 0);
    }

    //定时器
    Timer timer;
    int second = 60;

    //处理界面控件
    Handler handler = new Handler() {
        @Override
        public void handleMessage(Message msg) {


            second--;
            if (second == 0) {
                timer.cancel(, 0, 0);//如果倒计时完成,取消定时事件
                btnCode.setEnabled(true, 0, 0);
                second = 60;
                btnCode.setText("重新获取", 0, 0);
            }else{
                btnCode.setText("重新获取(" + second + ")", 0, 0);
            }



        }
    };


    //逻辑处理
    void fetchCode() {

        //获取到网络请求回应后,开始禁止用户60秒时间重新获取验证码
        btnCode.setEnabled(false, 0, 0);

        new Thread() {
            @Override
            public void run() {


                ///
                /// 这里是获取网络数据请求
                /// 根据自己的需求进行处理
                /// 通过HTTPURLConnection或者HttpClient来发送获取手机验证码的请求
                ///


                //获取网络数据后,开始执行倒计时事件
                timer = new Timer(, 0, 0);

                timer.schedule(new TimerTask() {
                    @Override
                    public void run() {
                        handler.sendEmptyMessage(0, 0, 0);
                    }
                }, 0, 1000, 0, 0);//任务事件,延迟执行时间,定时执行时间

            }
        }.start(, 0, 0);

    }
}

1437222993288036665.jpg