Android studio 通过获取验证码用户登陆成功

步骤:1.注册获取AppKeyApp Secret---->2. 添加jar---->3. 配置权限+节点AndroidManifest.xml()----->4. 初始化----->5. 获取验证码和发送验证码

1.主要利用了mob网站上的SMSSDK短信验证功能,实现验证码的获取,进而得到登陆

登录平台,注册账号获取App Key 和App Secret (安利一个平台http://dashboard.mob.com/ 直接注册,创建app后就有App Key和App Secret 了),在你的应用中添加SMSSDK短信登录功能



下载版本-

SMS For Android Eclipse v3.1.1 

网址:(http://www.mob.com/downloadDetail/SMS/android)

现在没有Android Studio版本的了,可以利用此版本集成,下载后进行解压缩



因为是最新版本还是其他原因,里面没有aar包,aar包根据网上资料是说用于直接用他们网站提供的ui界面,在这里我们打算自己写一个界面,所以,不需要aar包

****************************************************************************************************************************

****************************************************************************************************************************

2.jar包的导入

将这四个包复制到Android studio 中app下的lips 中,然后我们开始在build.gradle  添加依赖,注意,在Android studio中有两个build.gradle,我们是在app下的,不是工程下的。

repositories{
    flatDir{
        dirs 'libs'
    }
}
因为你的文件夹下没有aar包,因此,无需下面配置
dependencies {
    ...//你的其他依赖
    
}
上面文件中如果有
implementation fileTree(include: ['*.jar'], dir: 'libs')

就不需要就不用管了,如果没有的话,你需要将你的jar包添加依赖在dependencies中天上这句话,一般这句话都有。

****************************************************************************************************************************

****************************************************************************************************************************

3.配置权限+节点AndroidManifest.xml()

 ---3.1在AndroidManifest.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.READ_SMS" />
<uses-permission android:name="android.permission.GET_TASKS" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

---3.2添加以下Activity:

<activity
   android:name="com.mob.tools.MobUIShell"
   android:theme="@android:style/Theme.Translucent.NoTitleBar"
   android:configChanges="keyboardHidden|orientation|screenSize"
   android:windowSoftInputMode="stateHidden|adjustResize"/>

---3.3在Application节点下添加以下属性:

android:name="com.mob.MobApplication"


****************************************************************************************************************************

****************************************************************************************************************************

4初始化

在Application节点下添加以下meta-data:

<!-- 通过AndroidManifest配置AppKey和AppSecret,如果你选择通过代码配置,则不需要配置以下meta-data -->
<meta-data android:name="Mob-AppKey" android:value="你的AppKey"/>
<meta-data android:name="Mob-AppSecret" android:value="你的AppSecret"/>

也可以

SMSSDK.initSDK(this,"Mob官网注册的key","Mob官网注册的secret");

都一样的两种方式

****************************************************************************************************************************

****************************************************************************************************************************

5.开始加代码了

activity_login.xml--(UI 界面)

<?xml version="1.0" encoding="utf-8"?>
<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"
    tools:context="com.example.myapp.Baseactivity.LoginActivity">
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="手机快捷登陆"
        android:textColor="@color/back"
        android:textSize="32px"
        android:layout_marginLeft="42dp"
        android:layout_marginTop="30dp"/>

    <EditText
        android:id="@+id/ed_code"
        android:layout_width="190dp"
        android:layout_height="wrap_content"
        android:layout_alignStart="@+id/ed_phone"
        android:layout_below="@+id/ed_phone"
        android:hint="@string/et_ver"
        android:inputType="number" />

    <EditText
        android:id="@+id/ed_phone"
        android:layout_width="300dp"
        android:layout_height="wrap_content"
        android:layout_below="@+id/ed_password"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="130dp"
        android:hint="@string/et_phone"
        tools:layout_editor_absoluteX="55dp"
        tools:layout_editor_absoluteY="52dp"
        android:inputType="number"/>

    <Button
        android:id="@+id/btn_getcord"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBottom="@+id/ed_code"
        android:layout_alignEnd="@+id/ed_phone"
        android:text="@string/get_ver"
        tools:layout_editor_absoluteX="259dp"
        tools:layout_editor_absoluteY="98dp"
        android:background="@color/blue"/>

    <EditText
        android:id="@+id/ed_password"
        android:layout_width="300dp"
        android:layout_height="0dp"
        android:hint="@string/set_password"
        tools:layout_editor_absoluteX="55dp"
        tools:layout_editor_absoluteY="145dp" />

    <Button
        android:id="@+id/bt_login"
        android:layout_width="300dp"
        android:layout_height="45dp"
        android:layout_alignStart="@+id/ed_code"
        android:layout_centerVertical="true"
        android:text="登陆"
        tools:layout_editor_absoluteX="75dp"
        tools:layout_editor_absoluteY="249dp"
        android:background="@color/blue"/>

    <CheckBox
        android:id="@+id/checkBox"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignStart="@+id/bt_login"
        android:layout_below="@+id/bt_login"
        android:text="@string/yes"
        android:textSize="10sp" />

    <ImageButton
        android:id="@+id/wxlogin"
        android:layout_width="60dp"
        android:layout_height="60dp"
        android:layout_above="@+id/textView"
        android:layout_centerHorizontal="true"
        android:background="@drawable/wx" />

    <TextView
        android:layout_width="50dp"
        android:layout_height="50dp"
        android:layout_alignEnd="@+id/ed_password"
        android:layout_alignParentBottom="true"
        android:layout_alignStart="@+id/wxlogin"
        android:layout_marginBottom="24dp"
        android:text="微信登陆"
        android:id="@+id/textView" />

</RelativeLayout>

LoginActivity.java

package com.example.myapp.Baseactivity;

import android.content.Intent;
import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.TextView;
import android.widget.Toast;

import com.example.myapp.R;

import cn.smssdk.EventHandler;
import cn.smssdk.SMSSDK;

public class LoginActivity extends AppCompatActivity implements View.OnClickListener {

    private EditText edit_phone;
    private EditText edit_cord;
    //private TextView now;
    private Button bt_getcord;
    private Button bt_login;
    private String phone_number;
    private String cord_number;
    private ImageButton wxlogin;
    EventHandler eventHandler;
    private int time=60;
    private boolean flag=true;
//*******************************************************************************
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);
        //初始化操作
        initview();

        eventHandler = new EventHandler() {
            public void afterEvent(int event, int result, Object data) {
                Message msg=new Message();//创建了一个对象
                msg.arg1=event;
                msg.arg2=result;
                msg.obj=data;
                handler.sendMessage(msg);
            }
        };

        SMSSDK.registerEventHandler(eventHandler);//注册短信回调(记得销毁,避免泄露内存)*/

    }
    private void initview() {
        edit_phone=(EditText)findViewById(R.id.ed_phone); //你的手机号

        edit_cord=(EditText)findViewById(R.id.ed_code);//你的验证码
        bt_getcord=(Button)findViewById(R.id.btn_getcord);//获取验证码按钮
        bt_login = (Button)findViewById(R.id.bt_login);//登陆按钮
        wxlogin = (ImageButton)findViewById(R.id.wxlogin);//微信登录按钮
        //三个触发事件
        bt_getcord.setOnClickListener(this);//验证码的触发事件
        bt_login.setOnClickListener(this);
        wxlogin.setOnClickListener(this);
    }
   protected void onDestroy() {//销毁
        super.onDestroy();
        SMSSDK.unregisterEventHandler(eventHandler);
    }

    /**
     * 使用Handler来分发Message对象到主线程中,处理事件
     */
    Handler handler=new Handler()
    {
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            int event=msg.arg1;
            int result=msg.arg2;
            Object data=msg.obj;
            if (event == SMSSDK.EVENT_GET_VERIFICATION_CODE) {//获取验证码成功
                if(result == SMSSDK.RESULT_COMPLETE) {
                    //回调完成
                    boolean smart = (Boolean)data;
                    if(smart) {
                        Toast.makeText(getApplicationContext(),"该手机号已经注册过,请重新输入",
                                Toast.LENGTH_LONG).show();
                        edit_phone.requestFocus();//焦点
                        return;
                    }
                }
            }
            //回调完成
            if (result==SMSSDK.RESULT_COMPLETE){
                if (event == SMSSDK.EVENT_SUBMIT_VERIFICATION_CODE) {//提交验证码成功
                    Toast.makeText(getApplicationContext(), "验证码输入正确",
                            Toast.LENGTH_LONG).show();
                }
            }else {//其他出错情况
                if(flag)
                {
                    bt_getcord.setVisibility(View.VISIBLE);
                    Toast.makeText(getApplicationContext(),"验证码获取失败请重新获取", Toast.LENGTH_LONG).show();
                    edit_phone.requestFocus();
                }
                else
                {
                    Toast.makeText(getApplicationContext(),"验证码输入错误", Toast.LENGTH_LONG).show();
                }

            }
        }

    };
      
    //按钮点击事件
     @Override
    public void onClick(View v) {
        /*String phone_number=edit_phone.getText().toString();//1
        String cord_number=bt_getcord.getText().toString().trim();//1 */
        switch (v.getId()){

            case  R.id.btn_getcord://获取验证码的ID
                if(judPhone())//去掉左右空格获取字符串,是正确的手机号
                {
                    SMSSDK.getVerificationCode("86",phone_number);//获取你的手机号的验证码
                    edit_cord.requestFocus();//判断是否获得焦点
                }
                break;
            //  获取后要提交你的验证码以判断是否正确,并登陆成功

            case R.id.bt_login://登陆页面的ID

                if(judCord())//判断验证码
                    SMSSDK.submitVerificationCode("86",phone_number,cord_number);//提交手机号和验证码

                    startActivity(new Intent(this,MainActivity.class));
                flag=false;
                break;

            case R.id.wxlogin://跳转到微信登陆
                break;

        }

    }
    private boolean judPhone() {//判断手机号是否正确
        //不正确的情况
        if(TextUtils.isEmpty(edit_phone.getText().toString().trim()))//对于字符串处理Android为我们提供了一个简单实用的TextUtils类,如果处理比较简单的内容不用去思考正则表达式不妨试试这个在android.text.TextUtils的类,主要的功能如下:
                                                                      //是否为空字符 boolean android.text.TextUtils.isEmpty(CharSequence str)
        {
            Toast.makeText(LoginActivity.this,"请输入您的电话号码",Toast.LENGTH_LONG).show();
            edit_phone.requestFocus();//设置是否获得焦点。若有requestFocus()被调用时,后者优先处理。注意在表单中想设置某一个如EditText获取焦点,光设置这个是不行的,需要将这个EditText前面的focusable都设置为false才行。
            return false;
        }
        else if(edit_phone.getText().toString().trim().length()!=11)
        {
            Toast.makeText(LoginActivity.this,"您的电话号码位数不正确",Toast.LENGTH_LONG).show();
            edit_phone.requestFocus();
            return false;
        }
        //正确的情况
        else
        {
            phone_number=edit_phone.getText().toString().trim();
            String num="[1][358]\\d{9}";
            if(phone_number.matches(num))
                return true;
            else
            {
                Toast.makeText(LoginActivity.this,"请输入正确的手机号码",Toast.LENGTH_LONG).show();
                return false;
            }
        }
    }

    private boolean judCord() {//判断验证码是否正确
        judPhone();//先执行验证手机号码正确与否
        if(TextUtils.isEmpty(edit_cord.getText().toString().trim()))//验证码
        {
            Toast.makeText(LoginActivity.this,"请输入您的验证码",Toast.LENGTH_LONG).show();
            edit_cord.requestFocus();//聚集焦点
            return false;
        }
        else if(edit_cord.getText().toString().trim().length()!=4)
        {
            Toast.makeText(LoginActivity.this,"您的验证码位数不正确",Toast.LENGTH_LONG).show();
            edit_cord.requestFocus();

            return false;
        }
        else
        {
            cord_number=edit_cord.getText().toString().trim();
            return true;
        }
    }
}

界面





猜你喜欢

转载自blog.csdn.net/huanhuan59/article/details/80265487