1.首先按照官网把依赖sdk...配置好:
http://www.mob.com/mobService/sms
<!--Mob短信-->
<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.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" />
//根目录添加:
buildscript {
repositories {
jcenter()
}
dependencies {
...
classpath 'com.mob.sdk:MobSDK:+'
}
// mode下添加插件:
apply plugin: 'com.mob.sdk'
MobSDK {
appKey "2b44b134ebb82"
appSecret "3d71cf2e0737081917488202679314e9"
SMSSDK {
version "3.2.1"
gui false
}
}
2.初始化:
MobSDK.init(this);
3.代码核心:
public EventHandler eh; //事件接收器
//在onCreate()中初始化:
init();
//点击提交的时候调用此方法(提交验证):
SMSSDK.submitVerificationCode("+86",mUsername,mCode);
@Override
protected void onDestroy() {
super.onDestroy();
SMSSDK.unregisterEventHandler(eh);//结束回收
}
/**
* 初始化事件接收器:
*/
private void init(){
//获取输入框内容:
getValue();
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) { //提交验证码成功
Toast.makeText(LoginActivity.this, "提交验证码成功", Toast.LENGTH_SHORT).show();
mainApi.Username=mUsername;
//存储用户数据:
LoginVerificationBean loginVerificationBean = new LoginVerificationBean(mUsername, mainApi.token);
LocalDataManager.saveCurrentUser(loginVerificationBean);
Intent intent = new Intent(LoginActivity.this, MainActivity.class);
startActivity(intent);
}else if (event == SMSSDK.EVENT_GET_VERIFICATION_CODE){ //获取验证码成功
Toast.makeText(LoginActivity.this, "获取验证码成功", Toast.LENGTH_SHORT).show();
mobCode=SMSSDK.EVENT_GET_VERIFICATION_CODE;
Log.i("asdsd",mobCode+"");
}else if (event ==SMSSDK.EVENT_GET_SUPPORTED_COUNTRIES){ //返回支持发送验证码的国家列表
Toast.makeText(LoginActivity.this, "返回支持发送验证码的国家列表", Toast.LENGTH_SHORT).show();
}
}else{
((Throwable)data).printStackTrace();
}
}
};
SMSSDK.registerEventHandler(eh); //注册短信回调
}
4.判断手机号规则:
/**
* 正则匹配手机号码:
*/
public boolean checkTel(String tel){
Pattern p = Pattern.compile("^[1][3,4,5,7,8][0-9]{9}$");
Matcher matcher = p.matcher(tel);
return matcher.matches();
}
5.设置搜索框里的关闭按钮(懒癌患者强烈推荐):
//设置输入框关闭:
setImageButton(phone,login_close);
/**
* 检测搜索框文字状态的方法:
*/
public void setImageButton( final EditText editText,
final ImageButton imageButton)
{
editText.addTextChangedListener( new TextWatcher()
{
// 输入中
@Override
public void onTextChanged(CharSequence arg0, int arg1, int arg2,
int arg3)
{
setImageButtonVisiable(editText, imageButton);
}
// 输入前
@Override
public void beforeTextChanged(CharSequence arg0, int arg1,
int arg2, int arg3)
{
setImageButtonVisiable(editText, imageButton);
}
// 输入后
@Override
public void afterTextChanged(Editable arg0)
{
setImageButtonVisiable(editText, imageButton);
}
});
}
/**
* 根据EditText是否有数据判断ImageButton是否可见,有数据则可见,没有则不可见
*
* @param editText
* @param imageButton
*/
public void setImageButtonVisiable( final EditText editText,
final ImageButton imageButton)
{
// 判断editText是否为空
if (TextUtils.isEmpty(String. valueOf(editText.getText()).trim()))
{
// 如果搜索框内没有内容,imageButton设置不可见
imageButton.setVisibility(Button. GONE);
} else
{
// 如果搜索框内有内容,imageButton设置可见
imageButton.setVisibility(Button. VISIBLE);
imageButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (editText != null) {
editText.getText().clear();
}
}
});
}
}
6.点击发送时一个时间倒计时按钮:
//开始计时:
new CountTimer(login_send).start();
/**
* Creator: huanghh;
* Date created: 2018/12/19 19:14;
* Description: 验证码倒计时工具
*/
public class CountTimer extends CountDownTimer {
public static final int TIME_COUNT = 60000;//时间防止从59s开始显示(以倒计时60s为例子)
private TextView btn;
private String endText;
public CountTimer(TextView btn) {
super(TIME_COUNT, 1000);
this.btn = btn;
this.endText = "发送";
}
/**
* @param btn 倒计时文本控件
* @param endText 结束时显示的文字
*/
public CountTimer(TextView btn, String endText) {
super(TIME_COUNT, 1000);
this.btn = btn;
this.endText = endText;
}
/**
* @param millisInFuture 倒计时总时间(如60S,120s等)
* @param countDownInterval 渐变时间(每次倒计1s)
* @param btn 点击的按钮(因为Button是TextView子类,为了通用我的参数设置为TextView)
* @param endText 倒计时结束后,按钮对应显示的文字
*/
public CountTimer(long millisInFuture, long countDownInterval, TextView btn, String endText) {
super(millisInFuture, countDownInterval);
this.btn = btn;
this.endText = endText;
}
// 计时完毕时触发
@Override
public void onFinish() {
btn.setText(endText);
btn.setEnabled(true);
}
// 计时过程显示
@Override
public void onTick(long millisUntilFinished) {
btn.setEnabled(false);
btn.setText(millisUntilFinished / 1000 + " 秒");
}
}
完结撒花。。。