Android&java的成长之路之八(Android短信验证 亲测)
来源:互联网 发布:唢呐软件下载 编辑:程序博客网 时间:2024/05/16 16:22
第三方登陆,注册,分享,等等是每个APP基本必备的一项功能,首先,我们今天先说一下Android短信验证。
这里要用到第三方包,进入mob网站,下载集成好的Android短信的SDK 即SMS SDK 下载下来如下图显示:
第一个是我们用不到的 后面四个加载到项目里面 如下图显示:
然后再根据mob官网上的文档进行相应的配置 ,配置好了之后,我们就可以在应用中用到SMSSDK这个类了 不妨作一下测试。
接下来 就说一下具体代码是怎么实现的吧。
package com.example.administrator.sms_sdk;import android.graphics.Color;import android.os.Bundle;import android.os.CountDownTimer;import android.os.Handler;import android.os.Message;import android.support.v7.app.AppCompatActivity;import android.util.Log;import android.view.View;import android.widget.Button;import android.widget.EditText;import android.widget.Toast;import org.json.JSONException;import org.json.JSONObject;import cn.smssdk.EventHandler;import cn.smssdk.SMSSDK;public class MainActivity extends AppCompatActivity implements View.OnClickListener { private EditText phone, phoneRandom; private Button btnRegister, btnCheckPass; private EventHandler eh; private CountTimer countTimer; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); inttView(); initEvent(); } //初始化控件 private void inttView() { phone = (EditText) findViewById(R.id.phone); phoneRandom = (EditText) findViewById(R.id.phoneRandom); btnCheckPass = (Button) findViewById(R.id.btnCheckPass); btnRegister = (Button) findViewById(R.id.btnRegister); countTimer = new CountTimer(60000, 1000); } private void initEvent() { btnRegister.setOnClickListener(this); btnCheckPass.setOnClickListener(this); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.btnCheckPass: if (phone.getText().toString().equals("") || phone.getText().toString().length() != 11 || (!phone.getText().toString().substring(0, 2).equals("13")) && (!phone.getText().toString().substring(0, 2).equals("15"))) { Toast.makeText(MainActivity.this, "请正确输入手机号码", Toast.LENGTH_SHORT).show(); return; } sendSMSRandom(); countTimer.start(); break; case R.id.btnRegister://点击了提交的按钮 if (phoneRandom.getText().toString().length()!=4) { Toast.makeText(MainActivity.this, "请输入正确验证码", Toast.LENGTH_SHORT).show(); return; } SMSSDK.submitVerificationCode("86", phone.getText().toString(), phoneRandom.getText().toString()); break; } } @Override protected void onDestroy() { super.onDestroy(); SMSSDK.unregisterEventHandler(eh);//解除注册的回掉 } //发送短信验证码的方法 public void sendSMSRandom() { //初始化短信验证 SMSSDK.initSDK(this, "fe42edb9cf9c", "d955f95b891af1d0f36842645d413432"); //监听事件 eh = new EventHandler() { @Override public void afterEvent(int event, int result, final Object data) { if (result == SMSSDK.RESULT_COMPLETE) { //回调完成 if (event == SMSSDK.EVENT_SUBMIT_VERIFICATION_CODE) { //提交验证码成功 Message ms = Message.obtain(); ms.arg1 = 2; ms.arg2 = 2; ms.obj = data.toString().substring(21); handler.sendMessage(ms); } else if (event == SMSSDK.EVENT_GET_VERIFICATION_CODE) { //获取验证码成功 Log.i("TTTTTTTTTT", data + ""); } else if (event == SMSSDK.EVENT_GET_SUPPORTED_COUNTRIES) { //返回支持发送验证码的国家列表 } } else { Message ms = Message.obtain(); ms.arg1 = 1; ms.arg2 = 1; ms.obj = data.toString().substring(21); handler.sendMessage(ms); ((Throwable) data).printStackTrace(); } } }; SMSSDK.registerEventHandler(eh); //注册短信回调 SMSSDK.getVerificationCode("86", phone.getText().toString()); } //每隔一分钟可以点击一次验证码 public class CountTimer extends CountDownTimer { /** * @param millisInFuture 时间间隔是多长时间 * @param countDownInterval 回调onTick方法,每隔多久执行一次 */ public CountTimer(long millisInFuture, long countDownInterval) { super(millisInFuture, countDownInterval); } //间隔时间内执行的操作 @Override public void onTick(long millisUntilFinished) { //更新页面组件 btnCheckPass.setText(millisUntilFinished / 1000 + "后重新发送"); btnCheckPass.setBackgroundColor(Color.rgb(169, 169, 169)); btnCheckPass.setClickable(false); } //间隔时间结束的时候才会调用 @Override public void onFinish() { //更新页面的组件 btnCheckPass.setText("获取验证码"); btnCheckPass.setBackgroundColor(Color.rgb(255, 255, 255)); btnCheckPass.setClickable(true); } } public Handler handler = new Handler() { @Override public void handleMessage(Message msg) { super.handleMessage(msg); String code = ""; if (msg.arg1 == 1) { JSONObject object = null; try { Log.i("TTTTTTTT", (msg.obj + "")); object = new JSONObject(msg.obj + ""); code = object.getString("status"); //这里进行返回的码数来提醒用户 switch (code) { case "466": Toast.makeText(MainActivity.this, "校验的验证码为空", Toast.LENGTH_SHORT).show(); break; case "467": Toast.makeText(MainActivity.this, "校验验证码请求频繁", Toast.LENGTH_SHORT).show(); break; case "468": Toast.makeText(MainActivity.this, "需要校验的验证码错误", Toast.LENGTH_SHORT).show(); break; } } catch (JSONException e) { e.printStackTrace(); Log.i("TTTTTTTT", e.getMessage()); } }else if(msg.arg1 == 2){ Toast.makeText(MainActivity.this,"注册成功",Toast.LENGTH_SHORT).show(); } } };}
代码量是有点多,不过看着解释都能理解的。这里有三个知识点需要提一下 一个是Handler Message 这个 还有个是JSON数据的处理 如果不用gson包的时候是怎么样处理的 这个应该复习下。还有短信验证的时候按钮倒计时 看看是怎么实现的。
0 0
- Android&java的成长之路之八(Android短信验证 亲测)
- android之短信验证
- Android之短信验证码
- Android之短信验证码
- Android之短信验证码
- android短信验证之Mob
- Android之短信验证码(用的Mob短信验证)
- 『实践』Android之短信验证码(用的Mob短信验证)
- Android&java的成长之路之三(Android引导页面和欢迎界面)
- android 验证码之短信验证(云之讯短信平台)
- android 验证码之短信验证(云之讯短信平台)
- java之短信验证
- Android开发之属于你的短信验证码(一)
- Android开发之属于你的短信验证码(二)
- Android之使用第三方的短信验证
- android开发之短信验证码
- Android 之短信验证码自动填写
- Android之免费短信验证Mob
- NDK开发
- Core Image
- Java HashMap循环遍历方式及其性能对比
- 碰撞检测之Sphere-Sphere检测
- Java排序三:直接插入排序
- Android&java的成长之路之八(Android短信验证 亲测)
- ScheduleExecutorService,周期性线程池
- 博客迁移
- 卡方独立性检验chisq.test()
- TIC TAC TOE 消去版
- [C语言][LeetCode][206]Reverse Linked List
- ACE日志
- Android应用程序插件化研究之DexClassLoader
- 思科高清终端C40 用CRT配置