手机获取验证码 ---SMS

本人通过mob官网进行学习此demo此官网也可以进行操作的三登录功能
进入官网之后的路或者注册账号,进行下载sdk
这里写图片描述

下载完成之后我们解压得到几个文件,里面我们有几个会用到的

这里写图片描述

我们将后4个包进行添加到工程的lib里面进行编译即可使用;

接下来就是各种操作进行实现功能,下面是在build_gradle面进行配置(必须要进行的一个操作)

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

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile name:'SMSSDK-3.0.0',ext:'aar'
    compile name:'SMSSDKGUI-3.0.0',ext:'aar'
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:23.4.0'
}

这里写图片描述

紧接着就是在清单文件里面进行配置

//我们需要用到的权限
  <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" />

<activity
            android:name="com.mob.tools.MobUIShell"
            android:theme="@android:style/Theme.Translucent.NoTitleBar"
            android:configChanges="keyboardHidden|orientation|screenSize"
        //{这个是在mob官网里面创建应用获得到的appkey} android:windowSoftInputMode="stateHidden|adjustResize"/>
             <meta-data android:name="Mob-AppKey" android:value="203480017e7a1"/>
           //{这个是在mob官网里面创建应用获得到的appcreat}
        <meta-data android:name="Mob-AppSecret" android:value="5399c9fbbfaa4a92360885c1bef9b1a0{这个是在mob官网里面创建应用获得到的}"/>

然后是我的布局文件.xml

<EditText
        android:id="@+id/phone"
        android:hint="请输入手机号"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:inputType="phone"/>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
            <EditText
                android:id="@+id/yzm"
                android:hint="输入验证码"
                android:layout_weight="1"
                android:layout_width="0dp"
                android:layout_height="wrap_content" />
        <Button
            android:id="@+id/huoqu_btn"
            android:layout_weight="1"
            android:layout_width="0dp"
            android:onClick="onClick"
            android:layout_height="wrap_content"
            android:text="获取验证码"/>
    </LinearLayout>

    <Button
        android:id="@+id/btn"
        android:text="登录"
        android:onClick="onClick"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

最后进行展示的就我集成好的代码文件:请看下面

package renchaofang.bawei.com.smsstudy;

import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
import android.view.Window;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

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

import static cn.smssdk.SMSSDK.getSupportedCountries;
import static cn.smssdk.SMSSDK.getVerificationCode;
import static cn.smssdk.SMSSDK.submitVerificationCode;

public class MainActivity extends AppCompatActivity{
    private final String TAG="--MainActivity--";
    private EventHandler eventHandler;
    private EditText phone;
    private EditText yzm;
    private Button button1;
    private Button button2;
    private EventHandler eh;
    private boolean isChange;
    //控制按钮样式是否改变
    private boolean tag = true;
    //每次验证请求需要间隔60S
    private int i=60;


    private Handler handler=new Handler(){
        @Override
        public void handleMessage(Message msg) {
            switch (msg.arg1) {
                case 0:
                    //客户端验证成功,可以进行注册,返回校验的手机和国家代码phone/country
                    Toast.makeText(MainActivity.this, msg.obj.toString(), Toast.LENGTH_SHORT).show();
                    break;
                case 1:
                    //获取验证码成功
                    Toast.makeText(MainActivity.this, msg.obj.toString(), Toast.LENGTH_SHORT).show();
                    break;
                case 2:
                    //返回支持发送验证码的国家列表
                    Toast.makeText(MainActivity.this, msg.obj.toString(), Toast.LENGTH_SHORT).show();
                    break;
            }
        }
    };
    private String yan;
    private String iphone;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.activity_main);
        //找到资源控件
        init();

        eh=new EventHandler(){
            @Override
            public void afterEvent(int event, int result, Object data) {
                if (result == SMSSDK.RESULT_COMPLETE) {
                    //回调完成
                    if (event == SMSSDK.EVENT_SUBMIT_VERIFICATION_CODE) {
                        //提交验证码成功
                        Message msg = new Message();
                        msg.arg1 = 0;
                        msg.obj = data;
                        handler.sendMessage(msg);
                        Log.d(TAG, "提交验证码成功");
                    } else if (event == SMSSDK.EVENT_GET_VERIFICATION_CODE) {
                        Message msg = new Message();
                        //获取验证码成功
                        msg.arg1 = 1;
                        msg.obj = "获取验证码成功";
                        handler.sendMessage(msg);
                        Log.d(TAG, "获取验证码成功");
                    } else if (event == SMSSDK.EVENT_GET_SUPPORTED_COUNTRIES) {
                        Message msg = new Message();
                        //返回支持发送验证码的国家列表
                        msg.arg1 = 2;
                        msg.obj = "返回支持发送验证码的国家列表";
                        handler.sendMessage(msg);
                        Log.d(TAG, "返回支持发送验证码的国家列表");
                    }
                } else {
                    Message msg = new Message();
                    //返回支持发送验证码的国家列表
                    msg.arg1 = 3;
                    msg.obj = "验证失败";
                    handler.sendMessage(msg);
                    Log.d(TAG, "验证失败");
                    ((Throwable) data).printStackTrace();
                }
            }
        };
        button1.setClickable(false);
        button1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                iphone = phone.getText().toString();
                if(iphone.equals("")){
                    Toast.makeText(MainActivity.this,"手机号不能为空",Toast.LENGTH_SHORT).show();
                }else {
//填写了手机号码
                    if(isMobileNO(iphone)){
                        //如果手机号码无误,则发送验证请求
                        button1.setClickable(true);
                        changeBtnGetCode();
                        getSupportedCountries();
                        getVerificationCode("86", iphone);
                    }else{
                        //手机号格式有误
                        Toast.makeText(MainActivity.this,"手机号格式错误,请检查",Toast.LENGTH_SHORT).show();
                    }
                }

            }
        });
        button2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //获取 得到验证码
                yan = yzm.getText().toString();
                if (yan.equals("")){
                    Toast.makeText(MainActivity.this,"验证码不能为空",Toast.LENGTH_SHORT).show();
                }else{
                    //填写了验证码,进行验证
                    submitVerificationCode("86", iphone, yan);
                }
            }
        });
        SMSSDK.registerEventHandler(eh); //注册短信回调

    }
    public void init(){
        phone = (EditText)findViewById(R.id.phone);
        yzm = (EditText)findViewById(R.id.yzm);
        button1 = (Button)findViewById(R.id.huoqu_btn);
        button2 = (Button)findViewById(R.id.btn);


    }
    private void changeBtnGetCode() {

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

                if (tag) {
                    while (i > 0) {
                        i--;
                        //如果活动为空
                        if (MainActivity.this == null) {
                            break;
                        }

                        MainActivity.this.runOnUiThread(new Runnable() {
                            @Override
                            public void run() {
                                button1.setText("获取验证码(" + i + ")");
                                button1.setClickable(false);
                            }
                        });

                        try {
                            Thread.sleep(1000);
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                    }
                    tag = false;
                }
                i = 60;
                tag = true;

                if (MainActivity.this != null) {
                    MainActivity.this.runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            button1.setText("获取验证码");
                            button1.setClickable(true);
                        }
                    });
                }
            }
        };
        thread.start();
    }


    private boolean isMobileNO(String phone) {
       /*
    移动: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、(1349卫通)
    总结起来就是第一位必定为1,第二位必定为3或5或8,其他位置的可以为0-9
    */
        String telRegex = "[1][358]\\d{9}";//"[1]"代表第1位为数字1,"[358]"代表第二位可以为3、5、8中的一个,"\\d{9}"代表后面是可以是0~9的数字,有9位。
        if (TextUtils.isEmpty(phone)) return false;
        else return phone.matches(telRegex);
    }
}

END…..
加油。。。。。!

PlaySMS是一个灵活的基于web的短信平台,可连接短信网关、个人信息系统以及企业的群组通讯工具等。 功能亮点: •多个数据库引擎支持(使用PHP PEAR DB ) •发送短信到单一的移动电话( web2mobile ) •发送短信广播到一组手机( web2mobiles ,短信群发) •支持发送文字,闪存和unicode消息 •能够处理大量的短信( 500K短信包月) •接收私人短信收件箱,并转发到电子邮件( mobile2web ) •转发单从短信到移动一组手机( mobile2mobiles ) •短信自动回复,便于autoreplying格式化接收到的SMS •短信板,转发接收到的短信到电子邮件,以JSON出口量和一些其他格式 •短信指令,使用SMS执行服务器端的shell脚本 •短信定制,转发接收到的SMS到自定义应用程序,在本地或外部URL •短信投票,使用SMS管理查询系统,以图形的出口输出, JSON等格式 •短信竞猜,供职于短信竞猜 •短信订阅,管理用户订阅使用SMS服务 •短信同步从smssync.ushahidi.com利用SMSSync应用程序 •创建您自己的功能,工具,主题和网关模块作为一个插件 •支持监务, Gnokii , Kannel所,短信服务器工具, Msgtoolbox ,上行, Nexmo , Twilio , Infobip和的Clickatell •支持模拟网关,用于测试传入和传出的短信 •WebServices的发送短信,检索递送报告,检查信用和更多 •超长短信支持,文本的长度是可配置的 •速率短讯目的前缀 •每个用户短信信用体系 •时区设置 •多语言用户界面(英语,法语,印尼语,俄罗斯和其他几个人) •轻松添加新的语言的用户界面 •基于Web的界面
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值