最近写一个Android的小项目,想想看能不能做一个短信验证码。最后找到了一个第三方服务商『Mob』。使用其中的SMSSDK。

下载完成并解压后(文件夹名称有所更改)。

需要使用到的jar包(刚才的文件夹下,找就可以)

【新建Android项目,就不再一一赘述。】
完成项目结构如下图:
【Projecet视图下(在此视图下添加jar包)】

【Android视图下】

基本配置如下:
1.AndroidManifest.xml主配置文件

<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name="com.mob.tools.MobUIShell"
android:theme="@android:style/Theme.Translucent.NoTitleBar"
android:configChanges="keyboardHidden|orientation|screenSize"
android:windowSoftInputMode="stateHidden|adjustResize"/>
</application>
<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.GET_TASKS" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
2.build.gradle配置【classpath】及【jar】包

3.(此处有两个build.gradle文件,【区别】在于一个是项目使用,一个是模块)
![]()
--------------------------------------
基本配置完成,开始主体程序。
1.MainActivity.java
import android.app.ProgressDialog;
import android.os.Bundle;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import com.mob.MobSDK;
import java.util.HashMap;
import cn.smssdk.EventHandler;
import cn.smssdk.SMSSDK;
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private EditText et_number;
private EditText et_checkCode;
private TextView tv_getCheckCode;
private TextView tv_sendCheckCode;
private String phoneNumber;
private String checkCode;
private ProgressDialog dialog;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
et_number = (EditText) findViewById(R.id.et_number);
et_checkCode = (EditText) findViewById(R.id.et_checkCode);
tv_getCheckCode = (TextView) findViewById(R.id.tv_getCheckCode);
tv_sendCheckCode = (TextView) findViewById(R.id.tv_sendCheckCode);
checkCode = et_checkCode.getText().toString().trim();
tv_getCheckCode.setOnClickListener(this);
tv_sendCheckCode.setOnClickListener(this);
MobSDK.init(this,"28c4d19ea6b04","24006ac31eee052e78214ec8208938e6");
//注册短信回调
SMSSDK.registerEventHandler(ev);
}
/**
* 短信验证的回调监听
*/
private EventHandler ev = new EventHandler() {
@Override
public void afterEvent(int event, int result, Object data) {
if (result == SMSSDK.RESULT_COMPLETE) { //回调完成
//提交验证码成功,如果验证成功会在data里返回数据。data数据类型为HashMap<number,code>
if (event == SMSSDK.EVENT_SUBMIT_VERIFICATION_CODE) {
Log.e("TAG", "提交验证码成功" + data.toString());
HashMap<String, Object> mData = (HashMap<String, Object>) data;
String country = (String) mData.get("country");//返回的国家编号
String phone = (String) mData.get("phone");//返回用户注册的手机号
Log.e("TAG", country + "====" + phone);
if (phone.equals(phoneNumber)) {
runOnUiThread(new Runnable() {//更改ui的操作要放在主线程,实际可以发送hander
@Override
public void run() {
showDailog("恭喜你!通过验证");
dialog.dismiss();
}
});
} else {
runOnUiThread(new Runnable() {
@Override
public void run() {
showDailog("验证失败");
dialog.dismiss();
}
});
}
} else if (event == SMSSDK.EVENT_GET_VERIFICATION_CODE) {//获取验证码成功
Log.e("TAG", "获取验证码成功");
} else if (event == SMSSDK.EVENT_GET_SUPPORTED_COUNTRIES) {//返回支持发送验证码的国家列表
}
} else {
((Throwable) data).printStackTrace();
}
}
};
private void showDailog(String text) {
new AlertDialog.Builder(this)
.setTitle(text)
.setPositiveButton("确定", null)
.show();
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.tv_getCheckCode:
toast("getCode");
getCheckCode();
break;
case R.id.tv_sendCheckCode:
toast("sendCode");
sendCheckCode();
break;
}
}
/**
* 获取验证码
*/
public void getCheckCode() {
phoneNumber = et_number.getText().toString().trim();
//发送短信,传入国家号和电话号码
if (TextUtils.isEmpty(phoneNumber)) {
toast("号码不能为空!");
} else {
SMSSDK.getVerificationCode("+86", phoneNumber);
toast("发送成功!");
}
}
/**
* 向服务器提交验证码,在监听回调中监听是否验证
*/
private void sendCheckCode() {
checkCode = et_checkCode.getText().toString();
if (!TextUtils.isEmpty(checkCode)) {
dialog = ProgressDialog.show(this, null, "正在验证...", false, true);
//提交短信验证码
SMSSDK.submitVerificationCode("+86", phoneNumber, checkCode);//国家号,手机号码,验证码
Toast.makeText(this, "提交了注册信息:" + phoneNumber, Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(this, "验证码不能为空", Toast.LENGTH_SHORT).show();
}
}
/**
* Toast
* @param info
*/
public void toast(String info){
Toast.makeText(MainActivity.this, info, Toast.LENGTH_SHORT).show();
}
@Override
protected void onDestroy() {
SMSSDK.unregisterEventHandler(ev);
super.onDestroy();
}
}
2.布局文件
<?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:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<LinearLayout
android:id="@+id/ll_user"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingLeft="16dp"
android:paddingRight="16dp">
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center"
android:hint="手机号:" />
<EditText
android:id="@+id/et_number"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="4"/>
<TextView
android:id="@+id/tv_getCheckCode"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="2"
android:gravity="center"
android:text="获取验证码"
android:clickable="true"/>
</LinearLayout>
<LinearLayout
android:id="@+id/ll_pass"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/ll_user"
android:paddingLeft="16dp"
android:paddingRight="16dp">
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center"
android:text="验证码:"/>
<EditText
android:id="@+id/et_checkCode"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="4"/>
<TextView
android:id="@+id/tv_sendCheckCode"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="2"
android:gravity="center"
android:text="验证"
android:clickable="true"/>
</LinearLayout>
</RelativeLayout>
在手机上安装测试。


成功验证。不过速度稍微有点慢,但是是免费的,这点还是可以的。
【GitHub下载链接】https://github.com/xiongshibao/SImpleMobSMSSDK
如有瑕疵,请批评指教!
本文介绍了如何在Android Studio项目中集成Mob的SMSSDK进行短信验证码功能的开发。从下载SDK到配置项目,包括在AndroidManifest.xml和build.gradle文件中的设置,以及在MainActivity.java中实现主要逻辑,最终在手机上成功测试验证。虽然速度稍慢,但作为免费服务尚可接受。项目源码可在GitHub找到。
2196

被折叠的 条评论
为什么被折叠?



