无GUI短信验证

1.

把 MobCommons.jar                Mob 通用公共库      必须
    MobTools.jar                  Mob 工具公共库      必须

 SMSSDK-<version>.aar          SMSSDK 核心         必须

 

2.通过在app/build.gradle 文件的android节点下增加如下:

repositories{
    flatDir{
        dirs 'libs' //就是你放aar的目录地址
    }

 

3.在app/build.gradle文件的依赖项下添加

dependencies {
    ....//你的其他依赖
    compile name:'SMSSDK-<version>',ext:'aar'  //
}

 

4.AndroidManifest 文件配置

<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" />

 

5. 初始化

// 通过代码注册你的AppKey和AppSecret
MobSDK.init(context, "你的AppKey", "你的AppSecret");

 1)设置事件监听

    eventHandler = new EventHandler() {
            @Override
            public void afterEvent(int event, int result, Object data) {
                Message msg = new Message();
                msg.arg1 = event;
                msg.arg2 = result;
                msg.obj = data;
//                msg.what = MobSDK_HANDLER;
                handler.sendMessage(msg);
            }

            @Override
            public void beforeEvent(int event, Object o) {
                Message msg = new Message();
                msg.arg1 = event;
                msg.obj = data;
                handler.sendMessage(msg);
            }
        };
        // 注册回调监听接口
         SMSSDK.registerEventHandler(eventHandler);

 

2).事件,会被监听到而实现上面的berfore和after方法。从而把参数给Message对象

onSendMessageHandler.onSendMessage("86",userPhone);   
SMSSDK.getVerificationCode(
"86",userPhone,onSendMessageHandler); //对应事件--获取验证码
SMSSDK.submitVerificationCode("86",login_input_phone_et.getText().toString().trim(),           //验证码验证事件
                    login_input_code_et.getText().toString().trim());

3.Handler对象接受Message,根据参数实现相关的操作。

Handler handler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
                int event = msg.arg1;
                int result = msg.arg2;
                Object data = msg.obj;
                    if (CODE_ING !=0 ){
                        login_request_code_btn.setText(CODE_ING + "s后重发");
                    }else{
                        login_request_code_btn.setText("重新发送");
                        login_request_code_btn.setClickable(true);
                    }
            if (result == SMSSDK.RESULT_COMPLETE)
            {
                //验证码验证成功
                if (event == SMSSDK.EVENT_SUBMIT_VERIFICATION_CODE)
                {
                    Toast.makeText(getApplicationContext(), "验证成功", Toast.LENGTH_LONG).show();
                    SMSSDK.unregisterAllEventHandler();
                    Intent intent = new Intent(getApplicationContext(), MainActivity.class);
                    startActivity(intent);
                } else if (event == SMSSDK.EVENT_GET_VERIFICATION_CODE) {         //验证码已发送
                    Toast.makeText(getApplicationContext(), "验证码已经发送",
                            Toast.LENGTH_SHORT).show();
                } else
                {
                    ((Throwable) data).printStackTrace();
                }
            }

            }

    };

 

 

布局代码:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <EditText
        android:id="@+id/login_input_phone_et"
        android:layout_width="280dp"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="107dp"
        android:ems="10"
        android:hint="请输入手机号"
        android:inputType="phone" />

    <requestFocus />

    <EditText
        android:id="@+id/login_input_code_et"
        android:layout_width="170dp"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/login_input_phone_et"
        android:layout_below="@+id/login_input_phone_et"
        android:layout_marginTop="44dp"
        android:hint="请输入验证码"
        android:inputType="textPassword" >
    </EditText>

    <Button
        android:id="@+id/login_request_code_btn"
        android:onClick="onClick"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignRight="@+id/login_input_phone_et"
        android:layout_alignTop="@+id/login_input_code_et"
        android:text="获取验证码" />

    <Button
        android:id="@+id/login_commit_btn"
        android:onClick="register"
        android:layout_width="280dp"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/login_input_code_et"
        android:layout_below="@+id/login_input_code_et"
        android:layout_marginTop="44dp"
        android:text="注册" />



</RelativeLayout>

login.java:

package com.jiangcun.activity;

import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Handler;
import android.os.Message;
import android.os.Bundle;
import android.provider.DocumentsContract;
import android.support.v7.app.AppCompatActivity;
import android.text.TextUtils;
import android.view.View;
import android.view.ViewParent;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

import com.jiangcun.cc.MainActivity;
import com.jiangcun.cc.R;
import com.mob.MobSDK;

import org.json.JSONObject;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

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

import static android.R.attr.data;
import static android.R.attr.mapViewStyle;

public class Login extends AppCompatActivity {

    EditText login_input_phone_et;
    EditText login_input_code_et;
    Button login_request_code_btn;
    Button login_commit_btn;
    static int CODE_ING;

    EventHandler eventHandler;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);
        initView();
        initSDK();
        login_commit_btn.setClickable(false);
    }

    void initView(){
        login_input_phone_et =(EditText)findViewById(R.id.login_input_phone_et);
        login_input_code_et = (EditText)findViewById(R.id.login_input_code_et);
        login_request_code_btn = (Button)findViewById(R.id.login_request_code_btn);
        login_commit_btn = (Button)findViewById(R.id.login_commit_btn);
    }

    private void initSDK()
    {
        MobSDK.init(this, "1fcd98f3d4d5c", "f57e4faddbd6f3aae1911900483a2a03");
        eventHandler = new EventHandler() {
            @Override
            public void afterEvent(int event, int result, Object data) {
                Message msg = new Message();
                msg.arg1 = event;
                msg.arg2 = result;
                msg.obj = data;
//                msg.what = MobSDK_HANDLER;
                handler.sendMessage(msg);
            }

            @Override
            public void beforeEvent(int event, Object o) {
                Message msg = new Message();
                msg.arg1 = event;
                msg.obj = data;
                handler.sendMessage(msg);
            }
        };
        // 注册回调监听接口
         SMSSDK.registerEventHandler(eventHandler);
    }

    Handler handler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
                int event = msg.arg1;
                int result = msg.arg2;
                Object data = msg.obj;
                    if (CODE_ING !=0 ){
                        login_request_code_btn.setText(CODE_ING + "s后重发");
                    }else{
                        login_request_code_btn.setText("重新发送");
                        login_request_code_btn.setClickable(true);
                    }
            if (result == SMSSDK.RESULT_COMPLETE)
            {
                //验证码验证成功
                if (event == SMSSDK.EVENT_SUBMIT_VERIFICATION_CODE)
                {
                    Toast.makeText(getApplicationContext(), "验证成功", Toast.LENGTH_LONG).show();
                    SMSSDK.unregisterAllEventHandler();
                    Intent intent = new Intent(getApplicationContext(), MainActivity.class);
                    startActivity(intent);
                } else if (event == SMSSDK.EVENT_GET_VERIFICATION_CODE) {         //验证码已发送
                    Toast.makeText(getApplicationContext(), "验证码已经发送",
                            Toast.LENGTH_SHORT).show();
                } else
                {
                    ((Throwable) data).printStackTrace();
                }
            }

            }

    };

    public void onClick(View view){
        final String userPhone = login_input_phone_et.getText().toString().trim();
        if (checkPhone(userPhone)!=true || userPhone.length()!=11){
            Toast.makeText(getApplicationContext(),"请输入正确的手机号码",Toast.LENGTH_LONG).show();
        }else{
            final OnSendMessageHandler onSendMessageHandler = new OnSendMessageHandler() {
                @Override
                public boolean onSendMessage(String s, String s1) {
                    if (s1 == null){
                        Toast.makeText(getApplicationContext(),"sdfds",Toast.LENGTH_LONG).show();
                    }
                    return  false;
                }
            };
            onSendMessageHandler.onSendMessage("86",userPhone);
            SMSSDK.getVerificationCode("86",userPhone,onSendMessageHandler);
            login_commit_btn.setClickable(true);
            new Thread(new Runnable()
            {
                @Override
                public void run()
                {
                    login_request_code_btn.setClickable(false);
                    for (int i = 60; i >=  0; i--)
                    {
                        CODE_ING = i;
                        handler.sendEmptyMessage(CODE_ING);
                        try
                        {
                            Thread.sleep(1000);
                        } catch (InterruptedException e)
                        {
                            e.printStackTrace();
                        }
                    }
                }
            }).start();
        }
    }

    public void register(View view){
        if (login_input_code_et.getText().toString().trim() == ""){
            Toast.makeText(getApplicationContext(),"请输入验证码",Toast.LENGTH_LONG).show();
        }else{
            SMSSDK.submitVerificationCode("86",login_input_phone_et.getText().toString().trim(),
                    login_input_code_et.getText().toString().trim());
        }
    }

    public boolean checkPhone(String phoneNum){
        Pattern pattern = Pattern.compile("1[1-9][0-9]{9}");
        Matcher matcher = pattern.matcher(phoneNum);

        if (matcher.find()){
            return true;
        }
        return false;
    }
}

 

posted @ 2017-08-19 11:48  halo-漾  阅读(275)  评论(0编辑  收藏  举报