1,先按照mob的要求,下载SMSSDK,并在清单文件中设置:
http://wiki.mob.com/sms-android-%E6%97%A0gui%E6%8E%A5%E5%8F%A3%E8%B0%83%E7%94%A8/
2,自定义登录页面的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_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:padding="10dp"
tools:context="com.vily.sdkmsmhaha.MainActivity">
<EditText
android:id="@+id/phone"
android:hint="请输入手机号"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<EditText
android:id="@+id/psw"
android:hint="请输入密码"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<EditText
android:id="@+id/verification"
android:hint="请输入验证码"
android:layout_width="match_parent"
android:layout_weight="1"
android:layout_height="wrap_content"/>
<Button
android:id="@+id/getVerification"
android:text="获取验证码"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout>
<Button
android:id="@+id/complete"
android:text="注册完成"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout>
3,java代码:
package com.vily.sdkmsmhaha;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import butterknife.ButterKnife;
import butterknife.InjectView;
import butterknife.OnClick;
import cn.smssdk.EventHandler;
import cn.smssdk.SMSSDK;
public class MainActivity extends AppCompatActivity {
@InjectView(R.id.phone)
EditText mPhone;
@InjectView(R.id.psw)
EditText mPsw;
@InjectView(R.id.verification)
EditText mVerification;
@InjectView(R.id.getVerification)
Button mGetVerification;
@InjectView(R.id.complete)
Button mComplete;
private EventHandler mEventHandler;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ButterKnife.inject(this);
// 如果希望在读取通信录的时候提示用户,可以添加下面的代码,并且必须在其他代码调用之前,否则不起作用;如果没这个需求,可以不加这行代码
// SMSSDK.setAskPermisionOnReadContact(boolShowInDialog);
// 创建EventHandler对象
// 这里是验证成功的回调,可以处理验证成功后您自己的逻辑,需要注意的是这里不是主线程
mEventHandler = new EventHandler() {
public void afterEvent(int event, int result, Object data) {
if (data instanceof Throwable) {
Throwable throwable = (Throwable) data;
final String msg = throwable.getMessage();
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(MainActivity.this, msg, Toast.LENGTH_SHORT).show();
}
});
} else {
if (event == SMSSDK.EVENT_GET_VERIFICATION_CODE) {
// 这里是验证成功的回调,可以处理验证成功后您自己的逻辑,需要注意的是这里不是主线程
System.out.println("------------------data+" + "获取验证码成功"+data);
}
}
}
};
// 注册监听器
SMSSDK.registerEventHandler(mEventHandler);
}
protected void onDestroy() {
super.onDestroy();
SMSSDK.unregisterEventHandler(mEventHandler);
}
@OnClick({R.id.getVerification, R.id.complete})
public void onViewClicked(View view) {
switch (view.getId()) {
case R.id.getVerification:
String phone = mPhone.getText().toString().trim();
SMSSDK.getVerificationCode("86", phone);发送短信验证码到手机号 86表示的是中国
break;
case R.id.complete:
break;
}
}
}
4,registerEventHandler 建议用mob的
EventHandler 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) {
//提交验证码成功
}else if (event == SMSSDK.EVENT_GET_VERIFICATION_CODE){
//获取验证码成功
}else if (event ==SMSSDK.EVENT_GET_SUPPORTED_COUNTRIES){
//返回支持发送验证码的国家列表
}
}else{
((Throwable)data).printStackTrace();
}
}
};
SMSSDK.registerEventHandler(eh); //注册短信回调
5,注册完成的点击事件,在这里校验验证码
String vCode = mEdittxtCode.getText().toString().trim();
if (TextUtils.isEmpty(vCode)) {
ToastUtils.show(this, R.string.smssdk_write_identify_code);
return;
}
SMSSDK.submitVerificationCode("86",mPhone,vCode);
mDialog.show();
6,点击获取验证码,100秒后再次获取验证码: 这里可以和上面的获取验证码的 handler 合并
public void onViewClicked() {
SMSSDK.getVerificationCode("86", mPhone);
mTimerView = new CountTimerView(mBtnReSend,R.string.smssdk_resend_identify_code);
mTimerView.start();
mDialog.setMessage("正在重新获取验证码");
mDialog.show();
}
7,在handler 里面 ,判断验证码是否提交成功
class SMSEvenHanlder extends EventHandler{
@Override
public void afterEvent(final int event, final int result,
final Object data) {
runOnUiThread(new Runnable() {
@Override
public void run() {
System.out.println("-----------------data+2+"+data);
if(mDialog !=null && mDialog.isShowing())
mDialog.dismiss();
if (result == SMSSDK.RESULT_COMPLETE) {
if (event == SMSSDK.EVENT_SUBMIT_VERIFICATION_CODE) {
ToastUtils.show(getApplicationContext(),"验证成功:");
System.out.println("-----------------data+2+验证成功");
doReg();
mDialog.setMessage("正在提交注册信息");
mDialog.show();
}
} else {
// 根据服务器返回的网络错误,给toast提示
try {
((Throwable) data).printStackTrace();
Throwable throwable = (Throwable) data;
JSONObject object = new JSONObject(
throwable.getMessage());
String des = object.optString("detail");
if (!TextUtils.isEmpty(des)) {
// ToastUtils.show(RegActivity.this, des);
return;
}
} catch (Exception e) {
SMSLog.getInstance().w(e);
}
}
}
});
}
}