一草娜、配置
在根目錄的build.gradle添加:
buildscript{
? ? repositories{
? ? ? ? maven{url"http://mvn.mob.com/android"}? ? ? //mob
? ? }
? ? dependencies{
? ? ? ? classpath'com.mob.sdk:MobSDK:+'? ? ? ? ? ? ? //mob
? ? }
}
在當(dāng)前工程的build.gradle添加:
applyplugin:'com.mob.sdk' //mob
MobSDK{
? ? appKey"3215c1e94b289"
? ? appSecret"88b943e3be4437d1f78ea9c416c53620"
? ? SMSSDK{
? ? ? ? mobileAuthtrue
? ? ? ? autoSMStrue
? ? }
}? ? ?
在manifest中添加:
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.USE_FINGERPRINT" />
<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" />
<uses-permission android:name="android.permission.RECEIVE_SMS" />
<uses-permission android:name="android.permission.READ_SMS" />? ? ? ? ? ? <!--mob-->
并在application里面添加:
<activity android:name=".forgetpwdphone"
? ? android:configChanges="keyboardHidden|orientation|screenSize"
? ? android:windowSoftInputMode="stateHidden|adjustResize"/>
xml文件:
參考:https://blog.csdn.net/program_dancing/article/details/102771519
drawable里面的這些自己根據(jù)喜好添加
java文件:
package com.example.smartcommunityv2;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.app.AlertDialog;
import android.os.Bundle;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Handler;
import android.os.Message;
import android.text.TextUtils;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import java.util.Timer;
import java.util.TimerTask;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import com.mob.MobSDK;? ? ? ? ? ? ? //mob
import cn.smssdk.EventHandler;
import cn.smssdk.SMSSDK;? ? ? ? ? ? //mob
public class forgetpwdphoneextends AppCompatActivity {
private TimerTasktt;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //mob
? ? private Timertm;
? ? private EditTextet_phonenum;
? ? private Buttonbtn_check;
? ? private EditTextet_checkecode;
? ? private Buttonbtn_sure;
? ? private int TIME =60;//倒計(jì)時(shí)60s這里應(yīng)該多設(shè)置些因?yàn)閙ob后臺(tái)需要60s,我們前端會(huì)有差異的建議設(shè)置90犬绒,100或者120
? ? public Stringcountry="86";//這是中國(guó)區(qū)號(hào),如果需要其他國(guó)家列表诈胜,可以使用getSupportedCountries();獲得國(guó)家區(qū)號(hào)
? ? private Stringphone;
? ? private static final int CODE_REPEAT =1; //重新發(fā)送//mob
? ? @Override
? ? protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
? ? ? ? setContentView(R.layout.activity_forgetpwdphone);
? ? ? ? MobSDK.init(this, "3215c1e94b289", "88b943e3be4437d1f78ea9c416c53620");? ? //mob
? ? ? ? SMSSDK.registerEventHandler(eh); //注冊(cè)短信回調(diào)(記得銷(xiāo)毀贼涩,避免泄露內(nèi)存)
? ? ? ? initView();? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //mob
? ? }
Handlerhd =new Handler() {
@Override
? ? ? ? public void handleMessage(Message msg) {
if (msg.what ==CODE_REPEAT) {
btn_check.setEnabled(true);
? ? ? ? ? ? ? ? btn_sure.setEnabled(true);
? ? ? ? ? ? ? ? tm.cancel();//取消任務(wù)
? ? ? ? ? ? ? ? tt.cancel();//取消任務(wù)
? ? ? ? ? ? ? ? TIME =60;//時(shí)間重置
? ? ? ? ? ? ? ? btn_check.setText("重新發(fā)送驗(yàn)證碼");
? ? ? ? ? ? }else {
btn_check.setText(TIME +"重新發(fā)送驗(yàn)證碼");
? ? ? ? ? ? }
}
};
? ? //回調(diào)
? ? EventHandlereh=new EventHandler(){
public void afterEvent(int event, int result, Object data) {
if (result == SMSSDK.RESULT_COMPLETE) {
if (event == SMSSDK.EVENT_SUBMIT_VERIFICATION_CODE) {
toast("驗(yàn)證成功");
? ? ? ? ? ? ? ? ? ? Intent intent =new Intent(forgetpwdphone.this, login.class);
? ? ? ? ? ? ? ? ? ? startActivity(intent);
? ? ? ? ? ? ? ? }else if (event == SMSSDK.EVENT_GET_VERIFICATION_CODE){//獲取驗(yàn)證碼成功
? ? ? ? ? ? ? ? ? ? toast("獲取驗(yàn)證碼成功");
? ? ? ? ? ? ? ? }else if (event ==SMSSDK.EVENT_GET_SUPPORTED_COUNTRIES){//如果你調(diào)用了獲取國(guó)家區(qū)號(hào)類(lèi)表會(huì)在這里回調(diào)
? ? ? ? ? ? ? ? ? ? //返回支持發(fā)送驗(yàn)證碼的國(guó)家列表
? ? ? ? ? ? ? ? }
}else{//錯(cuò)誤等在這里(包括驗(yàn)證失斞早汀)
? ? ? ? ? ? ? ? //錯(cuò)誤碼請(qǐng)參照http://wiki.mob.com/android-api-錯(cuò)誤碼參考/這里我就不再繼續(xù)寫(xiě)了
? ? ? ? ? ? ? ? ((Throwable)data).printStackTrace();
? ? ? ? ? ? ? ? String str = data.toString();
? ? ? ? ? ? ? ? toast(str);
? ? ? ? ? ? }
}
};
? ? private void toast(final String str) {
runOnUiThread(new Runnable() {
@Override
? ? ? ? ? ? public void run() {
Toast.makeText(forgetpwdphone.this, str, Toast.LENGTH_SHORT).show();
? ? ? ? ? ? }
});
? ? }
private void initView() {
et_phonenum = (EditText) findViewById(R.id.et_phonenum);
? ? ? ? btn_check = (Button) findViewById(R.id.btn_check);
? ? ? ? et_checkecode = (EditText) findViewById(R.id.et_checkecode);
? ? ? ? btn_sure = (Button) findViewById(R.id.btn_sure);
? ? ? ? btn_check.setOnClickListener(this::onClick);
? ? ? ? btn_sure.setOnClickListener(this::onClick);
? ? }
public void onClick(View v)
{
switch (v.getId())
{
case R.id.btn_check:
phone =et_phonenum.getText().toString().trim().replaceAll("/s","");
? ? ? ? ? ? ? ? if (!TextUtils.isEmpty(phone))
{
//定義需要匹配的正則表達(dá)式的規(guī)則
? ? ? ? ? ? ? ? ? ? String REGEX_MOBILE_SIMPLE ="^((13[0-9])|(15[^4,\\D])|(18[0,5-9]))\\d{8}$";
? ? ? ? ? ? ? ? ? ? //把正則表達(dá)式的規(guī)則編譯成模板
? ? ? ? ? ? ? ? ? ? Pattern pattern = Pattern.compile(REGEX_MOBILE_SIMPLE);
? ? ? ? ? ? ? ? ? ? //把需要匹配的字符給模板匹配,獲得匹配器
? ? ? ? ? ? ? ? ? ? Matcher matcher = pattern.matcher(phone);
? ? ? ? ? ? ? ? ? ? // 通過(guò)匹配器查找是否有該字符管挟,不可重復(fù)調(diào)用重復(fù)調(diào)用matcher.find()
? ? ? ? ? ? ? ? ? ? if (matcher.find())
{//匹配手機(jī)號(hào)是否存在
? ? ? ? ? ? ? ? ? ? ? ? alterWarning();
? ? ? ? ? ? ? ? ? ? }
else
? ? ? ? ? ? ? ? ? ? {
toast("手機(jī)號(hào)格式錯(cuò)誤");
? ? ? ? ? ? ? ? ? ? }
}
else
? ? ? ? ? ? ? ? {
toast("請(qǐng)先輸入手機(jī)號(hào)");
? ? ? ? ? ? ? ? }
break;
? ? ? ? ? ? case R.id.btn_sure:
//獲得用戶(hù)輸入的驗(yàn)證碼
? ? ? ? ? ? ? ? String code =et_checkecode.getText().toString().replaceAll("/s","");
? ? ? ? ? ? ? ? if (!TextUtils.isEmpty(code))
{//判斷驗(yàn)證碼是否為空
? ? ? ? ? ? ? ? ? ? //驗(yàn)證
? ? ? ? ? ? ? ? ? ? SMSSDK.submitVerificationCode(country,? phone,? code);
? ? ? ? ? ? ? ? }
else if(phone.length()==0&code.length()!=0)
{
toast("請(qǐng)輸入手機(jī)號(hào)");
? ? ? ? ? ? ? ? }
else if(phone.length()==0&code.length()==0)
{
toast("請(qǐng)輸入完整信息");
? ? ? ? ? ? ? ? }
break;
? ? ? ? }
}
//彈窗確認(rèn)下發(fā)
? ? private void alterWarning() {
//構(gòu)造器
? ? ? ? AlertDialog.Builder builder =new AlertDialog.Builder(this);
? ? ? ? builder.setTitle("星際通告"); //設(shè)置標(biāo)題
? ? ? ? builder.setMessage("我們將要發(fā)送伽馬信號(hào)到坐標(biāo)為" +phone +"的星球進(jìn)行驗(yàn)證"); //設(shè)置內(nèi)容
? ? ? ? builder.setIcon(R.mipmap.spongebob);//設(shè)置圖標(biāo)僻孝,圖片id即可
? ? ? ? builder.setPositiveButton("確定", new DialogInterface.OnClickListener() {
//設(shè)置確定按鈕
? ? ? ? ? ? @Override
? ? ? ? ? ? public void onClick(DialogInterface dialog, int which) {
dialog.dismiss(); //關(guān)閉dialog
? ? ? ? ? ? ? ? //通過(guò)sdk發(fā)送短信驗(yàn)證(請(qǐng)求獲取短信驗(yàn)證碼,在監(jiān)聽(tīng)(eh)中返回)
? ? ? ? ? ? ? ? SMSSDK.getVerificationCode(country, phone);
? ? ? ? ? ? ? ? //做倒計(jì)時(shí)操作
? ? ? ? ? ? ? ? Toast.makeText(forgetpwdphone.this, "已發(fā)送" + which, Toast.LENGTH_SHORT).show();
? ? ? ? ? ? ? ? btn_check.setEnabled(false);
? ? ? ? ? ? ? ? btn_sure.setEnabled(true);
? ? ? ? ? ? ? ? tm =new Timer();
? ? ? ? ? ? ? ? tt =new TimerTask() {
@Override
? ? ? ? ? ? ? ? ? ? public void run() {
hd.sendEmptyMessage(TIME--);
? ? ? ? ? ? ? ? ? ? }
};
? ? ? ? ? ? ? ? tm.schedule(tt,0,1000);
? ? ? ? ? ? }
});
? ? ? ? builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {//設(shè)置取消按鈕
? ? ? ? ? ? @Override
? ? ? ? ? ? public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
? ? ? ? ? ? ? ? Toast.makeText(forgetpwdphone.this, "已取消" + which, Toast.LENGTH_SHORT).show();
? ? ? ? ? ? }
});
? ? ? ? //參數(shù)都設(shè)置完成了您单,創(chuàng)建并顯示出來(lái)
? ? ? ? builder.create().show();
? ? }
//銷(xiāo)毀短信注冊(cè)
? ? @Override
? ? protected void onDestroy() {
super.onDestroy();
? ? ? ? // 注銷(xiāo)回調(diào)接口registerEventHandler必須和unregisterEventHandler配套使用,否則可能造成內(nèi)存泄漏虐秦。
? ? ? ? SMSSDK.unregisterEventHandler(eh);
? ? }
}