androidstudio基于mob平台实现手机号验证

1 篇文章 0 订阅
1 篇文章 0 订阅

androidstudio基于mob平台实现手机号验证

一、配置

在根目录的build.gradle添加:
buildscript {
repositories {
maven {url “http://mvn.mob.com/android”}
}
dependencies {
classpath ‘com.mob.sdk:MobSDK:+’
}
}
在当前工程的build.gradle添加:
apply plugin: ‘com.mob.sdk’
MobSDK {
appKey “3215c1e94b289”
appSecret “88b943e3be4437d1f78ea9c416c53620”
SMSSDK {
mobileAuth true
autoSMS true
}
}
在manifest添加:

<uses-permission android:name="android.permission.READ_CONTACTS" />         <!--mob-->
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.USE_FINGERPRINT" />
<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" />
<uses-permission android:name="android.permission.RECEIVE_SMS" />
<uses-permission android:name="android.permission.READ_SMS" />             <!--mob-->
并且在application添加:
<activity android:name=".forgetpwdphone"
        android:configChanges="keyboardHidden|orientation|screenSize"
        android:windowSoftInputMode="stateHidden|adjustResize"/>   

二、xml文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_paret"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:padding="50dp"
    android:gravity="center"
    android:background="@mipmap/enrollbackgroud"
    tools:context=".forgetpwdphone">
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">
        <TextView
            android:layout_width="70dp"
            android:layout_height="wrap_content"
            android:text="手机号:"
            android:textSize="20dp"
            android:layout_weight="0"/>
        <EditText
            android:inputType="phone"
            android:id="@+id/et_phonenum"
            android:layout_weight="1"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            />
    </LinearLayout>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">
        <EditText
            android:id="@+id/et_checkecode"
            android:layout_weight="1"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:hint="验证码"
            android:inputType="number"/>
        <Button
            android:background="@drawable/changebutton"
            android:id="@+id/btn_check"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="获取验证码"
            android:textColor="#fff"/>
    </LinearLayout>
    <Button
        android:background="@drawable/changebutton"
        android:enabled="false"
        android:id="@+id/btn_sure"
        android:layout_marginTop="20dp"
        android:textColor="#fff"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="登录" />
</LinearLayout>

三、java文件

package com.example.smartcommunityv2;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.app.AlertDialog;
import android.os.Bundle;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Handler;
import android.os.Message;
import android.text.TextUtils;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import java.util.Timer;
import java.util.TimerTask;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import com.mob.MobSDK;              //mob
import cn.smssdk.EventHandler;
import cn.smssdk.SMSSDK;            //mob
public class forgetpwdphone extends AppCompatActivity {
    private TimerTask tt;                                  //mob
    private Timer tm;
    private EditText et_phonenum;
    private Button btn_check;
    private EditText et_checkecode;
    private Button btn_sure;
    private int TIME = 60;//倒计时60s这里应该多设置些因为mob后台需要60s,我们前端会有差异的建议设置90,100或者120
    public String country="86";//这是中国区号,如果需要其他国家列表,可以使用getSupportedCountries();获得国家区号
    private String phone;
    private static final int CODE_REPEAT = 1; //重新发送                             //mob
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_forgetpwdphone);
        MobSDK.init(this, "3215c1e94b289", "88b943e3be4437d1f78ea9c416c53620");    //mob
        SMSSDK.registerEventHandler(eh); //注册短信回调(记得销毁,避免泄露内存)
        initView();                                                                                //mob
    }
    Handler hd = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            if (msg.what == CODE_REPEAT) {
                btn_check.setEnabled(true);
                btn_sure.setEnabled(true);
                tm.cancel();//取消任务
                tt.cancel();//取消任务
                TIME = 60;//时间重置
                btn_check.setText("重新发送验证码");
            }else {
                btn_check.setText(TIME + "重新发送验证码");
            }
        }
    };
    //回调
    EventHandler eh=new EventHandler(){
        public void afterEvent(int event, int result, Object data) {
            if (result == SMSSDK.RESULT_COMPLETE) {
                if (event == SMSSDK.EVENT_SUBMIT_VERIFICATION_CODE) {
                    toast("验证成功");
                    Intent intent = new Intent(forgetpwdphone.this, login.class);
                    startActivity(intent);
                }else if (event == SMSSDK.EVENT_GET_VERIFICATION_CODE){       //获取验证码成功
                    toast("获取验证码成功");
                }else if (event ==SMSSDK.EVENT_GET_SUPPORTED_COUNTRIES){//如果你调用了获取国家区号类表会在这里回调
                    //返回支持发送验证码的国家列表
                }
            }else{//错误等在这里(包括验证失败)
                //错误码请参照http://wiki.mob.com/android-api-错误码参考/这里我就不再继续写了
                ((Throwable)data).printStackTrace();
                String str = data.toString();
                toast(str);
            }
        }
    };
    private void toast(final String str) {
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                Toast.makeText(forgetpwdphone.this, str, Toast.LENGTH_SHORT).show();
            }
        });
    }
    private void initView() {
        et_phonenum = (EditText) findViewById(R.id.et_phonenum);
        btn_check = (Button) findViewById(R.id.btn_check);
        et_checkecode = (EditText) findViewById(R.id.et_checkecode);
        btn_sure = (Button) findViewById(R.id.btn_sure);
        btn_check.setOnClickListener(this::onClick);
        btn_sure.setOnClickListener(this::onClick);
    }
    public void onClick(View v)
    {
        switch (v.getId())
        {
            case R.id.btn_check:
                phone = et_phonenum.getText().toString().trim().replaceAll("/s","");
                if (!TextUtils.isEmpty(phone))
                {
                    //定义需要匹配的正则表达式的规则
                    String REGEX_MOBILE_SIMPLE =  "^((13[0-9])|(15[^4,\\D])|(18[0,5-9]))\\d{8}$";
                    //把正则表达式的规则编译成模板
                    Pattern pattern = Pattern.compile(REGEX_MOBILE_SIMPLE);
                    //把需要匹配的字符给模板匹配,获得匹配器
                    Matcher matcher = pattern.matcher(phone);
                    // 通过匹配器查找是否有该字符,不可重复调用重复调用matcher.find()
                    if (matcher.find())
                    {//匹配手机号是否存在
                        alterWarning();
                    }
                    else
                    {
                        toast("手机号格式错误");
                    }
                }
                else
                {
                    toast("请先输入手机号");
                }
                break;
            case R.id.btn_sure:
                //获得用户输入的验证码
                String code = et_checkecode.getText().toString().replaceAll("/s","");
                if (!TextUtils.isEmpty(code))
                {//判断验证码是否为空
                    //验证
                    SMSSDK.submitVerificationCode( country,  phone,  code);
                }
                else if(phone.length()==0&code.length()!=0)
                {
                    toast("请输入手机号");
                }
                else if(phone.length()==0&code.length()==0)
                {
                    toast("请输入完整信息");
                }
                break;
        }
    }
    //弹窗确认下发
    private void alterWarning() {
        //构造器
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setTitle("星际通告"); //设置标题
        builder.setMessage("我们将要发送伽马信号到坐标为" + phone + "的星球进行验证"); //设置内容
        builder.setIcon(R.mipmap.spongebob);//设置图标,图片id即可
        builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
            //设置确定按钮
            @Override
            public void onClick(DialogInterface dialog, int which) {
                dialog.dismiss(); //关闭dialog
                //通过sdk发送短信验证(请求获取短信验证码,在监听(eh)中返回)
                SMSSDK.getVerificationCode(country, phone);
                //做倒计时操作
                Toast.makeText(forgetpwdphone.this, "已发送" + which, Toast.LENGTH_SHORT).show();
                btn_check.setEnabled(false);
                btn_sure.setEnabled(true);
                tm = new Timer();
                tt = new TimerTask() {
                    @Override
                    public void run() {
                        hd.sendEmptyMessage(TIME--);
                    }
                };
                tm.schedule(tt,0,1000);
            }
        });
        builder.setNegativeButton("取消", new DialogInterface.OnClickListener() { //设置取消按钮
            @Override
            public void onClick(DialogInterface dialog, int which) {
                dialog.dismiss();
                Toast.makeText(forgetpwdphone.this, "已取消" + which, Toast.LENGTH_SHORT).show();
            }
        });
        //参数都设置完成了,创建并显示出来
        builder.create().show();
    }
    //销毁短信注册
    @Override
    protected void onDestroy() {
        super.onDestroy();
        // 注销回调接口registerEventHandler必须和unregisterEventHandler配套使用,否则可能造成内存泄漏。
        SMSSDK.unregisterEventHandler(eh);
    }
}
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

人生只为一个成果

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值