短信验证码SDK,为开发者提供全球通用的短信验证码工具,开发者能够用其在App植入短信验证码SDK、简略设置即可短信验证,集成疾速便捷,且前期易于治理

编写xml布局创立本人的登录xml布局,在res/layout文件下新建activity_custom_login.xml文件,如下图:

绘制本人的xml布局文件,可参考如下代码:

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="vertical"    android:paddingTop="50dp"    android:paddingRight="10dp"    tools:context="cn.mob.smssdk.demo.smslogin.ui.login.CustomLoginActivity">    <LinearLayout        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:orientation="horizontal"        >        <TextView            android:id="@+id/login_phone_textView"            android:layout_width="0dp"            android:layout_weight="3"            android:layout_height="wrap_content"            android:gravity="right"            android:padding="10dp"            android:text="@string/login_phone" />        <EditText            android:id="@+id/editTextPhone"            android:layout_width="0dp"            android:layout_weight="9"            android:layout_height="wrap_content"            android:ems="10"            android:text="136****6666"            android:inputType="phone" />    </LinearLayout>    <LinearLayout        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:orientation="horizontal"        >        <TextView            android:id="@+id/login_code_textView"            android:layout_width="0dp"            android:layout_weight="3"            android:gravity="center"            android:layout_height="wrap_content"            android:padding="10dp"            android:text="@string/login_code" />        <EditText            android:id="@+id/editTextNumber"            android:layout_width="0dp"            android:layout_weight="4"            android:layout_height="wrap_content"            android:ems="10"            android:text="123456"            android:inputType="number" />        <Button            android:id="@+id/get_code_id"            android:layout_width="0dp"            android:layout_weight="3"            android:gravity="center"            android:layout_height="match_parent"            android:text="@string/get_code"            >        </Button>    </LinearLayout>    <LinearLayout        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:orientation="vertical"        android:paddingTop="50dp"        >        <Button            android:id="@+id/login_id"            android:layout_width="100dp"            android:layout_height="match_parent"            android:layout_gravity="center"            android:text="@string/login"            />    </LinearLayout></LinearLayout>

编写代码在我的项目中创立登录CustomLoginActivity类,实现性能代码如下:

package xx.xx.xx;

import androidx.appcompat.app.AppCompatActivity;import android.annotation.SuppressLint; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.text.TextUtils; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.Toast;import com.mob.MobSDK;import java.util.Timer; import java.util.TimerTask;import cn.smssdk.EventHandler; import cn.smssdk.SMSSDK; import cn.smssdk.demo.R;public class CustomLoginActivity extends AppCompatActivity implements View.OnClickListener {

EventHandler eventHandler;EditText editTextPhone,editTextNumber;Button get_code_id,login_id;Timer timer;int count = 60;@SuppressLint("HandlerLeak")Handler handler = new Handler(){    public void handleMessage(Message msg) {        int tag = msg.what;        switch (tag){            case 1:                int arg = msg.arg1;                if(arg==1){                    get_code_id.setText("从新获取");                    //计时完结进行计时把值复原                    count = 60;                    timer.cancel();                    get_code_id.setEnabled(true);                }else{                    get_code_id.setText(count+"");                }                break;            case 2:                Toast.makeText(CustomLoginActivity.this,"获取短信验证码胜利",Toast.LENGTH_LONG).show();                break;            case 3:                Log.i("Codr","获取短信验证码失败");                Toast.makeText(CustomLoginActivity.this,"获取短信验证码失败",Toast.LENGTH_LONG).show();                break;            default:                break;        }    };};@Overrideprotected void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView(R.layout.activity_custom_login);    MobSDK.submitPolicyGrantResult(true);    init();}private void init(){    editTextPhone = findViewById(R.id.editTextPhone);    editTextNumber = findViewById(R.id.editTextNumber);    get_code_id = findViewById(R.id.get_code_id);    get_code_id.setOnClickListener(this::onClick);    login_id = findViewById(R.id.login_id);    login_id.setOnClickListener(this::onClick);    eventHandler = new EventHandler() {        @Override        public void afterEvent(int event, int result, Object data) {            // TODO 此处为子线程!不可间接解决UI线程!解决后续操作需传到主线程中操作!            if (result == SMSSDK.RESULT_COMPLETE) {                //胜利回调                if (event == SMSSDK.EVENT_SUBMIT_VERIFICATION_CODE) {                    //提交短信、语音验证码胜利                } else if (event == SMSSDK.EVENT_GET_VERIFICATION_CODE) {                    Message message = new Message();                    message.what = 2;                    handler.sendMessage(message);                } else if (event == SMSSDK.EVENT_GET_VOICE_VERIFICATION_CODE) {                    //获取语音验证码胜利                    Message message = new Message();                    message.what = 2;                    handler.sendMessage(message);                }            } else if (result == SMSSDK.RESULT_ERROR) {                //失败回调                Message message = new Message();                message.what = 3;                handler.sendMessage(message);            } else {                //其余失败回调                ((Throwable) data).printStackTrace();            }        }    };    SMSSDK.registerEventHandler(eventHandler); //注册短信回调}@Overridepublic void onClick(View view) {    String phone = "";    String code = "";    int id = view.getId();    switch (id){        case R.id.get_code_id:            phone = editTextPhone.getText().toString().trim();            if (!TextUtils.isEmpty(phone)){                //倒计时                CountdownStart();                getVerificationCode("86",phone);            }else{                Toast.makeText(this,"请输出手机号码",Toast.LENGTH_LONG).show();            }            break;        case R.id.login_id:            phone = editTextPhone.getText().toString().trim();            code = editTextNumber.getText().toString().trim();            if (TextUtils.isEmpty(phone)){                Toast.makeText(this,"请输出手机号码",Toast.LENGTH_LONG).show();            }else if (TextUtils.isEmpty(code)){                Toast.makeText(this,"请输出验证码",Toast.LENGTH_LONG).show();            }else{                //登录逻辑            }            break;    }}/** * cn.smssdk.SMSSDK.class * 申请文本验证码 * @param country   国家区号 * @param phone     手机号 */public static void getVerificationCode(String country, String phone){    //获取短信验证码    SMSSDK.getVerificationCode(country,phone);}/**cn.smssdk.SMSSDK.class * 申请文本验证码(带模板编号) * @param tempCode  模板编号 * @param country   国家区号 * @param phone     手机号 */public static void getVerificationCode(String tempCode,String country, String phone){    //获取短信验证码    SMSSDK.getVerificationCode(tempCode,country,phone);}//倒计时函数private void CountdownStart(){    get_code_id.setEnabled(false);    timer = new Timer();    timer.schedule(new TimerTask() {        @Override        public void run() {            Message message = new Message();            message.what = 1;            message.arg1 = count;            if(count!=0){                count--;            }else {                return;            }            handler.sendMessage(message);        }    }, 1000,1000);}@Overrideprotected void onDestroy() {    super.onDestroy();    // 应用完EventHandler需登记,否则可能呈现内存透露    SMSSDK.unregisterEventHandler(eventHandler);}}

运行效果图如下: