Android如何通过手机获取验证码来完成注册功能_Android

注册很多app或者网络账户的时候,经常需要手机获取验证码,来完成注册,那时年少,只是觉得手机获取验证码这件事儿很好玩,并没有关心太多,她是如何实现的,以及她背后的故事到底是什么样子的,现在小编接手的这个项目里面,就需要通过手机号进行注册,并且手机号发送相应的验证码,来完成注册,那么在一些应用app里面到底是如何实现点击按钮获取验证码,来完成注册这整个流程的呢?今天小编就以注册为例,和小伙伴们分享一下,如何通过手机号获取验证码来完成注册的一整套流程以及如何采用正则表达式来验证手机号码是否符合电信、移动、联通的规范。

       首先我们需要做的第一步就是ApiClient里面编写获取验证码的方法,具体代码如下:

<span style="font-size:18px;">/**
   * 说明:获取验证码
   * 作者:丁国华
   * 时间:2015-8-27 下午5:47:36
   */
  public static String getValidateCode(AppContext appContext,
      Map<String, Object> map) throws AppException {
    // 定义要访问的接口和要强转的实体
    String validateUrl = _MakeURL(URLs.VALIDATE_CODE_URL, map);
    ValidateCode validateCode = null;
    try {
      // 获取服务器端Json数据
      String json = http_get(appContext, validateUrl); 

      // 解析为制定的实体对象
      validateCode = (ValidateCode) JSON.parseObject(json,
          ValidateCode.class); 

    } catch (Exception e) {
      if (e instanceof AppException)
        throw (AppException) e;
      throw AppException.network(e);
    } 

    // 返回验证码
    return validateCode.getCode();
  }
</span> 

       第二步编写AppContent里面的接口方法,具体代码如下所示:

<span style="font-size:18px;">/**
   * 说明:获取服务器验证码(不需要缓存)
   * 作者:丁国华
   * @date 2015-8-28 上午9:07:14
   */
  public String getCode(Map<String, Object> map) throws AppException { 

    String validateCode = ""; 

    // 如果网络可连接且解析无误返回正确的验证码,否则返回空字符串
    if (isNetworkConnected()) {
      try {
        validateCode = ApiClient.getValidateCode(this, map);
      } catch (AppException e) {
        if (validateCode == "") {
          throw e;
        }
      }
    }
    return validateCode;
  }
</span> 

        第三步,在StringUtils里面编写验证号码是否是手机号的正则表达式,具体代码如下:

<span style="font-size:18px;"> /* 说明:移动:134、135、136、137、138、139、150、151、157(TD)、158、159、187、188
   * 联通:130、131、132、152、155、156、185、186
   * 电信:133、153、180、189
   * 总结起来就是第一位必定为1,第二位必定为3或5或8,其他位置的可以为0-9
   * 验证号码 手机号 固话均可
   * 作者:丁国华
   * 2015年9月20日 13:52:35
   */
   public static boolean isPhoneNumberValid(String phoneNumber) {
   boolean isValid = false;
   String expression = "((^(13|15|18)[0-9]{9}$)|(^0[1,2]{1}\\d{1}-?\\d{8}$)|(^0[3-9] {1}\\d{2}-?\\d{7,8}$)|(^0[1,2]{1}\\d{1}-?\\d{8}-(\\d{1,4})$)|(^0[3-9]{1}\\d{2}-? \\d{7,8}-(\\d{1,4})$))";
   CharSequence inputStr = phoneNumber;
   Pattern pattern = Pattern.compile(expression);
   Matcher matcher = pattern.matcher(inputStr);
   if (matcher.matches() ) {
   isValid = true;
   }
   return isValid;
   }
  </span> 

      第四步:编写xml里面的文件,具体代码如下所示:

<span style="font-size:18px;"><?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  android:orientation="vertical" >
  <LinearLayout style="@style/top_title_style" >
    <Button
      android:id="@+id/register_back_login"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:layout_marginTop="5dp"
      android:background="@null"
      android:drawableLeft="@drawable/back"
      android:paddingLeft="5dp"
      android:text=" 登录"
      android:textColor="#FFFFFF"
      android:textSize="18sp" />
    <!-- 注册的布局 -->
    <TextView
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:layout_margin="5dp"
      android:layout_marginTop="2dp"
      android:layout_weight="1"
      android:gravity="center"
      android:paddingLeft="4dp"
      android:text="注册"
      android:textColor="#FFFFFF"
      android:textSize="20sp" />
    <!-- 注册的布局 -->
    <TextView
      android:id="@+id/nickname_confirm"
      android:layout_width="wrap_content"
      android:layout_height="match_parent"
      android:layout_marginTop="2dp"
      android:gravity="center"
      android:paddingLeft="60dp"
      android:paddingRight="10dp"
      android:textColor="#FFFFFF"
      android:textSize="20sp" />
  </LinearLayout>
  <RelativeLayout
    android:layout_width="fill_parent"
    android:layout_height="45dp"
    android:minHeight="50.0dip"
    android:paddingLeft="14.0dip"
    android:paddingRight="12.0dip" >
    <ImageView
      android:layout_width="23.0dip"
      android:layout_height="23.0dip"
      android:layout_centerVertical="true"
      android:src="@drawable/user_picture" />
    <EditText
     android:id="@+id/et_register_username_id"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:layout_marginLeft="20dp"
      android:background="@null"
      android:hint="用户名/手机号"
      android:paddingLeft="15dip"
      android:paddingTop="8dp"
      android:textColorHint="#BEBEBE"
      android:textSize="20sp" />
  </RelativeLayout>
  <View style="@style/PersonalLine" />
   <RelativeLayout
    android:layout_width="fill_parent"
    android:layout_height="45dp"
    android:minHeight="50.0dip"
    android:paddingLeft="14.0dip"
    android:paddingRight="12.0dip" >
     <ImageView
      android:layout_width="23.0dip"
      android:layout_height="23.0dip"
      android:layout_centerVertical="true"
      android:src="@drawable/phone_picture" />
    <EditText
      android:id="@+id/et_register_code_id"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:layout_marginLeft="20dp"
      android:background="@null"
      android:hint="请输入验证码"
      android:paddingLeft="15dip"
      android:paddingTop="8dp"
      android:textColorHint="#BEBEBE"
      android:textSize="20sp" />
    <Button
      android:id="@+id/bt_getcode_id"
      android:layout_width="120dp"
      android:layout_height="35dp"
      android:layout_marginLeft="200dp"
      android:layout_marginTop="5dp"
      android:background="@drawable/shape1"
      android:text="获取验证码"
      android:textColor="#FFFFFF"
      android:textSize="10sp" />
  </RelativeLayout>
  <View style="@style/PersonalLine" />
  <RelativeLayout
    android:layout_width="fill_parent"
    android:layout_height="45dp"
    android:minHeight="50.0dip"
    android:paddingLeft="14.0dip"
    android:paddingRight="12.0dip" >
    <ImageView
      android:layout_width="23.0dip"
      android:layout_height="23.0dip"
      android:layout_centerVertical="true"
      android:src="@drawable/lock" />
    <EditText
     android:id="@+id/et_register_password_id"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:layout_marginLeft="20dp"
      android:background="@null"
      android:hint="请输入新密码"
      android:paddingLeft="15dip"
      android:paddingTop="8dp"
      android:textColorHint="#BEBEBE"
      android:textSize="20sp" />
  </RelativeLayout>
  <View style="@style/PersonalLine" />
  <LinearLayout
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal" >
    <!-- 小对勾的布局 -->
    <CheckBox
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:layout_margin="10dp"
      android:layout_marginLeft="-10dp"
      android:scaleX="0.8"
      android:scaleY="0.8" />
    <TextView
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
     android:layout_gravity="center_vertical"
      android:text="我同意"
      android:textSize="18sp" />
    <TextView
      android:id="@+id/user_protocol"
      android:layout_width="200dp"
      android:layout_height="match_parent"
      android:layout_gravity="center_vertical"
      android:layout_marginLeft="5dp"
      android:gravity="center"
      android:text="用户协议及隐私条款"
      android:textColor="#FE8B4A"
      android:textSize="18sp" />
  </LinearLayout>
  <Button
    android:id="@+id/bt_register_id"
    android:layout_width="245dp"
    android:layout_height="45dp"
    android:layout_gravity="center_horizontal"
    android:layout_marginBottom="14dp"
    android:layout_marginLeft="15dp"
    android:layout_marginRight="15dp"
    android:layout_marginTop="5dp"
    android:background="@drawable/shape2"
    android:gravity="center"
    android:text="注 册"
    android:textColor="#FFFFFF"
    android:textSize="15sp" />
  <TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginLeft="80dp"
    android:paddingTop="5dp"
    android:text="您也可以直接登录"
    android:textColor="#BEBEBE"
    android:textSize="20sp" />
  <LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginTop="10dp"
    android:baselineAligned="false"
    android:gravity="center"
    android:orientation="horizontal" >
    <LinearLayout
      android:layout_width="0dp"
      android:layout_height="wrap_content"
      android:layout_weight="1"
      android:gravity="center"
      android:orientation="vertical" >
      <Button
        android:layout_width="60dp"
        android:layout_height="60dp"
  android:background="@drawable/weixin_login" /> 

      <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="微信登录"
        android:textColor="#BEBEBE"
        android:textSize="20sp" />
    </LinearLayout>
    <LinearLayout
      android:layout_width="0dp"
      android:layout_height="wrap_content"
      android:layout_weight="1"
      android:gravity="center"
      android:orientation="vertical" >
      <Button
        android:layout_width="60dp"
        android:layout_height="60dp"
   android:background="@drawable/weibo_login" />
      <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="微博登录"
        android:textColor="#BEBEBE"
        android:textSize="20sp" />
    </LinearLayout>
    <LinearLayout
      android:layout_width="0dp"
      android:layout_height="wrap_content"
      android:layout_weight="1"
      android:gravity="center"
      android:orientation="vertical" >
      <Button
      android:layout_width="60dp"       android:layout_height="60dp"         android:background="@drawable/qq_login" /> 

      <TextView
        android:layout_width="wrap_content"
       android:layout_height="wrap_content"
        android:text="QQ登录"
        android:textColor="#BEBEBE"
        android:textSize="20sp" />
    </LinearLayout>
  </LinearLayout>
</LinearLayout></span>

        第五步:编写java类RegisterActivity里面的代码,具体如下所示:

<span style="font-size:18px;">package com.jczb.car.ui;
import java.lang.ref.WeakReference;
import java.util.HashMap;
import java.util.Map;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import com.jczb.car.AppContext;
import com.jczb.car.AppException;
import com.jczb.car.R;
import com.jczb.car.common.StringUtils;
/**
 * 说明:注册功能页面 我们实现了取消线程的机制,从而保证它不会泄露 onDestroy()常常被用来在Activity推出前取消线程
 * 作者: 吴利昌
 * 时间: 2015-9-3上午9:19:15
 */
public class RegisterActivity extends Activity implements OnClickListener {
    // 声明用到的页面控件
  private EditText etRegisterName;
  private EditText etCode;
  private EditText etPassword;
  private Button btCode;
  private Button btRegister;
  private TextView tvUserProtocol;
  private Button btRegisterLoginBack;
  // 定义变量
  private String userName;
  private String passWord;
  public boolean isChange = false;
  private boolean tag = true;
  private int i = 60;
  Thread thread = null;
  /**客户端输入的验证码*/
  private String valicationCode;
  /**服务器端获取的验证码*/
  private static String serverValicationCode;
  /** 注册时所带的参数 */
  private Map<String, Object> registerParams = new HashMap<String, Object>();
  /** 获取验证码时所带的参数 */
  private Map<String, Object> codeParams = new HashMap<String, Object>();
  /** 注册是否成功 */
  private String regisgerStatus;
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.register);
    initView();
  }
  /**
   * 说明:初始化页面控件和事件
   * 作者: 吴利昌
   * 时间: 2015-9-3 上午9:23:42
   */
  public void initView() {
    // 初始化控件
    etRegisterName = (EditText) findViewById(R.id.et_register_username_id);
    etCode = (EditText) findViewById(R.id.et_register_code_id);
    etPassword = (EditText) findViewById(R.id.et_register_password_id);
    btCode = (Button) findViewById(R.id.bt_getcode_id);
    btRegister = (Button) findViewById(R.id.bt_register_id);
    tvUserProtocol=(TextView)findViewById(R.id.user_protocol);
    btRegisterLoginBack=(Button)findViewById(R.id.register_back_login);
    // 初始化监听事件
    btCode.setOnClickListener(this);
    btRegister.setOnClickListener(this);
    tvUserProtocol.setOnClickListener(this);
    btRegisterLoginBack.setOnClickListener(this);
  }
  private boolean isvalidate() {
    // TODO Auto-generated method stub
    // 获取控件输入的值
    String userName = etRegisterName.getText().toString().trim();
    if (StringUtils.isEmpty(userName)) {
      Toast.makeText(this, "手机号不能为空", Toast.LENGTH_SHORT).show();
      return false;
    }
    if (!StringUtils.isPhoneNumberValid(userName)) {
      Toast.makeText(this, "手机号有误", Toast.LENGTH_SHORT).show();
      return false;
    }
    return true;
  } 

  @Override
  public void onClick(View v) {
    switch (v.getId()) {
    case R.id.bt_getcode_id:
      if(!isvalidate())
        break;
      btCode.setText("获取验证码");
      btCode.setClickable(true);
      isChange = true;
      changeBtnGetCode();
      getValidateCode();
      break;
    case R.id.bt_register_id:
      register();
      break;
    case R.id.user_protocol:
      Intent intentUserProtocol = new Intent(this,UserProtocolActivity.class);
      startActivity(intentUserProtocol);
      break;
    case R.id.register_back_login:
      this.finish();
      break;
    default:
      break;
    }
  }
     private void changeBtnGetCode() {
    thread = new Thread() {
      @Override
      public void run() {
        if (tag) {
          while (i > 0) {
            i--;
            if (RegisterActivity.this == null) {
              break;
            }
            RegisterActivity.this
                .runOnUiThread(new Runnable() {
                  @Override
                  public void run() {
                    btCode.setText("获取验证码("
                        + i + ")");
                    btCode
                        .setClickable(false);
                  }
                });
            try {
              Thread.sleep(1000);
            } catch (InterruptedException e) {
              throw new RuntimeException(e);
            }
          }
          tag = false;
        }
        i = 60;
        tag = true;
        if (RegisterActivity.this != null) {
          RegisterActivity.this.runOnUiThread(new Runnable() {
            @Override
            public void run() {
              btCode.setText("获取验证码");
              btCode.setClickable(true);
            }
          });
        }
      };
    };
    thread.start();
  }
  /**
   * 说明:获取验证码
   *
   * 作者: 吴利昌
   * 时间: 2015-9-3 下午3:26:55
   */
  public boolean getValidateCode() {
     String name = etRegisterName.getText().toString().trim();
    String code = etCode.getText().toString().trim();
    if (name.equals("")) {
      Toast.makeText(this, "请输入用户名或手机号!", Toast.LENGTH_SHORT).show();
      return false;
    }else {
      userName = name;
      valicationCode = code;
      Thread codeThread = new Thread(codeRunnable);
      codeThread.start();
    }
    return true;
  }
  /**
   * 说明:注册
   *
   * 作者: 吴利昌
   * 时间: 2015-9-3 下午3:27:23
   */
  public void register() {
    // 1.首先判断输入的值是否有效
    // 2.然后判断输入的验证码是否有效(防止没有点击获取验证码自己填的错误验证码)
    // 3.最后注册
    if (isValid()) {
      if (valicationCode.equals(serverValicationCode)) {
        Thread thread = new Thread(sRunnable);
        thread.start();
      }else {
        Toast.makeText(this, "输入的验证码不正确!", Toast.LENGTH_SHORT).show();
      } 

    }
  }
  //--------------------------------获取验证码线程处理过程---开始-----------------------------
  /**
   * 自定义一个静态的具有弱引用的Handler,解决内存泄漏的问题,本handler用来获取验证码
   */
  private static class CodeHandler extends Handler {
    // 持有对本外部类的弱引用
    private final WeakReference<RegisterActivity> mActivity;
    public CodeHandler(RegisterActivity activity) {
      mActivity = new WeakReference<RegisterActivity>(activity);
    }
    @Override
    public void handleMessage(Message msg) {
      // 获取上下文对象
      RegisterActivity activity = mActivity.get();
      if (activity != null) {
        switch (msg.what) {
        case 1:
          serverValicationCode = (String)msg.obj;
          //activity.etCode.setText(serverValicationCode);
          break;
        case -1:
          Toast.makeText(activity, "获取验证码失败!", Toast.LENGTH_SHORT).show();
          break;
        case 0:
          Toast.makeText(activity, "哎呀,出错啦..", Toast.LENGTH_SHORT).show();
          break;
        default:
          break;
        }
      }
    }
  }
  /**实例化自定义的handler*/
  private final CodeHandler codeHandler = new CodeHandler(this);
  private String serverCode=null;
  /**定义获取验证码的子线程*/
  private Runnable codeRunnable = new Runnable() {
    @Override
    public void run() {
      Message msg = new Message();
      Map<String, Object> map = new HashMap<String, Object>();
      map.put("jbPhone", userName);
      // 获取全局对象Application
      AppContext appContext = (AppContext) getApplication();
      try {
        // 获取服务器数据
        serverValicationCode = appContext.getCode(map);
        // 返回true则将消息的what值为1,为false则what为-1,异常为0
        if (serverValicationCode.equals("")) {
          msg.what = -1;
        } else {
          msg.what = 1;
          msg.obj = serverValicationCode;
        }
      } catch (AppException e) {
        msg.what = 0;
        e.printStackTrace();
      }
      codeHandler.sendMessage(msg);
    }
  }; 

    //--------------------------------获取验证码线程处理过程----完成------------------------------  

   //--------------------------------注册线程处理过程--开始----------------------------------  

  /**
   * 自定义一个静态的具有弱引用的Handler,解决内存泄漏的问题,注册使用
   */
  private static class MyHandler extends Handler {
    // 持有对本外部类的弱引用
    private final WeakReference<RegisterActivity> mActivity; 

    public MyHandler(RegisterActivity activity) {
      mActivity = new WeakReference<RegisterActivity>(activity);
    }
    @Override
    public void handleMessage(Message msg) { 

      // 获取上下文对象
      RegisterActivity activity = mActivity.get();
      if (activity != null) {
        switch (msg.what) {
        case 1:
          Toast.makeText(activity, "注册成功!", Toast.LENGTH_SHORT).show();
          activity.finish();
          break;
        case -1:
          Toast.makeText(activity, "注册失败!", Toast.LENGTH_SHORT).show();
          break;
        case -2:
          Toast.makeText(activity, "该号已经注册!", Toast.LENGTH_SHORT).show();
          break;
        case 0:
          Toast.makeText(activity, "哎呀,出错啦..", Toast.LENGTH_SHORT).show();
          break;
        default:
          break;
        }
      }
    }
  }
  /**实例化自定义的handler*/
  private final MyHandler mHandler = new MyHandler(this);
  /**自定义子线程*/
  private Runnable sRunnable = new Runnable() {
    @Override
    public void run() {
      Message msg = new Message();
      // 获取全局对象Application
      AppContext appContext = (AppContext) getApplication();
      try {
        // 获取服务器数据
        regisgerStatus = appContext.register(registerParams); 

        // 返回true则将消息的what值为1,为false则what为-1,异常为0
        if (regisgerStatus.equals("true")) {
          msg.what = 1;
          msg.obj = regisgerStatus;
        } else if(regisgerStatus.equals("1")){
          msg.what = -2;
        }else if(regisgerStatus.equals("false")){
          msg.what = -1;}
      } catch (AppException e) {
        msg.what = 0;
        e.printStackTrace();
      }
      mHandler.sendMessage(msg);
    }
  }; 

    //--------------------------------注册线程处理过程---完成-----------------------------------  

  /**
   * 说明:注册之前判断数据是否为空
   *
   * @return
   * 作者: 吴利昌
   * 时间: 2015-9-3 下午3:29:04
   */
  public boolean isValid() {
    userName = etRegisterName.getText().toString().trim();
    valicationCode = etCode.getText().toString().trim();
    passWord = etPassword.getText().toString().trim();
    if (userName.equals("")) {
      Toast.makeText(this, "用户名不能为空!", Toast.LENGTH_SHORT).show();
      return false;
    }
    if (valicationCode.equals("")) {
      Toast.makeText(this, "验证码不能为空!", Toast.LENGTH_SHORT).show();
      return false;
    }
    if(!serverValicationCode.equals(valicationCode))
     {
      Toast.makeText(this, "验证码错误", Toast.LENGTH_SHORT).show();
      return false;
    }
    if (passWord.equals("")) {
      Toast.makeText(this, "密码不能为空!", Toast.LENGTH_SHORT).show();
      return false;
    } else if (passWord.length() < 6) {
      Toast.makeText(this, "密码至少6位!", Toast.LENGTH_SHORT).show();
      return false;
    }
    registerParams.put("username", userName);
    registerParams.put("psd", passWord);
    return true;
  }
}
</span> 

       最后,我们来运行一下,看看我们的效果,由于小编的genymotion不知道为什么不能运行了,所以委屈小伙伴们一下,看不了动态图片了,不过并不影响,我们首先用一个号码好注册一下,如下图所示:

        看一下手机收到的验证码:   

        最后来看一下,我们的注册:       

 

小编寄语:该博文,小编主要简单的介绍了如何通过手机获取验证码来完成注册的功能,以及如何利用正则表达式来验证码手机号码是否符合移动、联通、电信。还是那句话对于小编来说,既是挑战更是机遇,因为知识都是相通的,再者来说,在小编的程序人生中,留下最珍贵的记忆,虽然以后小编不一定从事安卓这个行业,代码世界里,很多种事,有的甜蜜,有的温馨,有的婉转成歌,有的绵延不息,在这些故事里,我们唯一的共通之处就是,某年,某月,某个波澜不惊的日子里,曾经很爱很爱你!爱你--这段实习的日子里,安卓带给小编的种种的惊喜。  

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索Android验证码
, Android获取验证码
, Android短信验证码
android手机验证码
完成拼图以获取验证码、android 获取验证码、请点击验证码完成发帖、验证码拼图如何完成、android 验证码控件,以便于您获取更多的相关知识。

时间: 2024-09-16 16:49:30

Android如何通过手机获取验证码来完成注册功能_Android的相关文章

Android如何通过手机获取验证码来完成注册功能

注册很多app或者网络账户的时候,经常需要手机获取验证码,来完成注册,那时年少,只是觉得手机获取验证码这件事儿很好玩,并没有关心太多,她是如何实现的,以及她背后的故事到底是什么样子的,现在小编接手的这个项目里面,就需要通过手机号进行注册,并且手机号发送相应的验证码,来完成注册,那么在一些应用app里面到底是如何实现点击按钮获取验证码,来完成注册这整个流程的呢?今天小编就以注册为例,和小伙伴们分享一下,如何通过手机号获取验证码来完成注册的一整套流程以及如何采用正则表达式来验证手机号码是否符合电信.

Android设计登录界面、找回密码、注册功能_Android

本文实例为大家分享了Android 登录.找回密码.注册功能的实现代码,供大家参考,具体内容如下 1.数据库的设计 我在数据库中添加了两张表,一张表用来存储用户信息,诸如用户名,密码,手机号等,可任意添加.另一张表用来存储上一个登录用户的账户信息,我是为了方便才另外创建了一张表去存储,而且这张表我设计了它只能存储一条信息,每次的存储都是对上一条记录的覆盖.事实上,我尝试过在存储用户信息的那张表内添加一个标识,用来标记上一次登录的是哪一个帐号,但是这样做的话,每次改变标识都需要遍历整张表,十分的麻

Android Demo手机获取验证码

       注册很多app或者网络账户的时候,经常需要手机获取验证码,来完成注册,那时年少,只是觉得手机获取验证码这件事儿很好玩,并没有关心太多,她是如何实现的,以及她背后的故事到底是什么样子的,现在小编接手的这个项目里面,就需要通过手机号进行注册,并且手机号发送相应的验证码,来完成注册,那么在一些应用app里面到底是如何实现点击按钮获取验证码,来完成注册这整个流程的呢?今天小编就以注册为例,和小伙伴们分享一下,如何通过手机号获取验证码来完成注册的一整套流程以及如何采用正则表达式来验证手机号码

Android实现自动填写获取验证码功能_Android

本文实例讲解了Android自动提取短信验证码解决方案,分享给大家供大家参考,具体内容如下 <uses-permission android:name="android.permission.RECEIVE_SMS"></uses-permission> <uses-permission android:name="android.permission.READ_SMS"></uses-permission> pack

Android实现判断手机未接来电及处理方法_Android

通常来说Android手机没有未接来电的监听器,如果要实现对未接来电的处理,则需要自己编写程序来实现.本文所述程序实例即为Android实现判断手机未接来电及处理方法.主要分为四个步骤来进行: 1.编写CallListener,处理手机状态变更监听,当状态改变时进行处理: package rbase.app.smshelpmate.call.listener; import java.text.MessageFormat; import rbase.app.smshelpmate.Config;

Android基于Sensor感应器获取重力感应加速度的方法_Android

本文实例讲述了Android基于Sensor感应器获取重力感应加速度的方法.分享给大家供大家参考,具体如下: FETC项目指导老师提出了新的需求,想要在游戏地图中表现出用户用户当期移动的方向,再用GPS的话显然很不靠谱,所以想到了android强大的感应器... 很多移动设备都内置了感应器,android通过Sensor和SensorManager类抽象了这些感应器,通过这些类可以使用android设备的传感器 一 介绍Sensor类 SDK只有一句介绍"Class representing a

Android使用BroadcastReceiver实现手机开机之后显示画面的功能_Android

本文实例讲述了Android使用BroadcastReceiver实现手机开机之后显示画面的功能.分享给大家供大家参考,具体如下: 在此例中介绍了怎样使用BroadcastRececiver.使用BroadcastReceiver需要继承这个类,并且重写public void onReceiver(Context context,Intent intent)这个方法,在这个方法中来添加想要实现的功能. 下面这个例子是实现android手机开机之后,所自动显示的画面,通过ImageView来引入一

安卓获取验证码-实现登陆注册验证码功能

问题描述 实现登陆注册验证码功能 做安卓端的,现在要实现登陆注册功能,登陆时有验证码,大神发个源码让我学习学习吧?出入职场的菜鸟一枚 解决方案 http://www.jb51.net/article/54344.htm 解决方案二: 登陆验证码-----实现验证码的获取和注册功能的代码实现如何在struts2中实现登陆的验证码功能

Android开发中关于获取当前Activity的一些思考_Android

在Android开发过程中,我们有时候需要获取当前的Activity实例,比如弹出Dialog操作,必须要用到这个.关于如何实现由很多种思路,这其中有的简单,有的复杂,这里简单总结一下个人的一些经验吧. 反射 反射是我们经常会想到的方法,思路大概为 获取ActivityThread中所有的ActivityRecord 从ActivityRecord中获取状态不是pause的Activity并返回 一个使用反射来实现的代码大致如下 public static Activity getActivit