安卓 实现手机获取短信验证码登录
文章目录
安卓 实现手机获取短信验证码登录一、获取短信验证码前面准备?(可看平台文档认证)二、开始编写代码配置依赖1.因为我们需要获取验证码所以要在AndroidManifest文件中添加权限2.在project build.gradle文件dependencies{ }里面添加依赖 一行即可3.在APP build.gradle文件上面添加4.在APP build.gradle文件android{ }里面添加5.最后在android Studio项目中三.开始编写代码1.先写一个.xml布局2.java类里面3.新建java类 Utils4.需要跳转页面,新建activity_main2.xml和Main2Activity四.总结写完后运行项目,输入自己的手机号获取验证码试一下吧!一、获取短信验证码前面准备?(可看平台文档认证)
1.首先进入/ MobTech官网注册账号。
2.点击开发者服务 开发者平台进入填写基本资料获取认证。
3.注册 填写完资料获取到平台给你的AppKey和App Secret,这两个东西非常重要,在后面的代码编写中要用到!
二、开始编写代码配置依赖
1.因为我们需要获取验证码所以要在AndroidManifest文件中添加权限
<!-- 可选权限说明 --><uses-permission android:name="android.permission.INTERNET" /> <!-- 允许应用程序联网(必须) --><uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <!-- 允许访问WiFi网络状态信息(必须) --><uses-permission android:name="android.permission.READ_PHONE_STATE" /> <!-- 允许读取手机状态(必须) --><uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <!-- 允许访问网络状态(必须) --><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <!-- 允许写手机存储(必须) --><uses-permission android:name="android.permission.RECEIVE_SMS" /> <!-- GUI自动填充验证码功能(非必须) --><uses-permission android:name="android.permission.READ_SMS" /> <!-- 从短信中读取验证码接口(非必须) --><uses-permission android:name="android.permission.READ_CONTACTS" />
2.在project build.gradle文件dependencies{ }里面添加依赖 一行即可
classpath "com.mob.sdk:MobSDK:.0319.1724"
3.在APP build.gradle文件上面添加
apply plugin: 'com.android.application'// 添加插件apply plugin: 'com.mob.sdk' //添加这一行即可
4.在APP build.gradle文件android{ }里面添加
// 在MobSDK的扩展中注册SMSSDK的相关信息MobSDK {appKey "更换平台上自己注册的appkey"appSecret "更换平台上自己注册的appSecret"SMSSDK {}}
5.最后在android Studio项目中
添加完依赖后androidstudio项目右上方会出现Sync Now,点击一下 等待项目配置完成。
三.开始编写代码
1.先写一个.xml布局
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="/apk/res/android"xmlns:app="/apk/res-auto"xmlns:tools="/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity"android:orientation="vertical"android:layout_gravity="center"><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="登录页面"android:textColor="#000000"android:textSize="20sp"android:layout_gravity="center"/><EditTextandroid:id="@+id/editTextPhoneNum"android:layout_width="200dp"android:layout_height="wrap_content"android:ems="10"android:hint="手机号"android:inputType="textPersonName"android:layout_gravity="center"android:layout_marginTop="10dp"/><LinearLayoutandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="center"android:layout_marginTop="5dp"><EditTextandroid:id="@+id/editTextCode"android:layout_width="100dp"android:layout_height="wrap_content"android:ems="10"android:hint="验证码"android:importantForAutofill="no"android:inputType="textPersonName" /><Buttonandroid:id="@+id/buttonCode"android:layout_width="wrap_content"android:layout_height="wrap_content"android:hint="获取验证码"android:layout_marginLeft="10dp"tools:text="获取验证码" /></LinearLayout><Buttonandroid:id="@+id/buttonLogin"android:layout_width="200dp"android:layout_height="wrap_content"android:hint="登录"android:layout_gravity="center"android:layout_marginTop="10dp"/></LinearLayout>
2.java类里面
public class MainActivity extends AppCompatActivity {private Button buttonCode,buttonLogin;private EditText editTextPhoneNum,editTextCode;private String phoneNum,code;private EventHandler eh;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);buttonCode = findViewById(R.id.buttonCode);buttonLogin = findViewById(R.id.buttonLogin);editTextCode = findViewById(R.id.editTextCode);editTextPhoneNum = findViewById(R.id.editTextPhoneNum);eh = new EventHandler() {@Overridepublic void afterEvent(int event, int result, Object data) {if (result == SMSSDK.RESULT_COMPLETE){//回调完成if (event == SMSSDK.EVENT_SUBMIT_VERIFICATION_CODE) {//提交验证码成功runOnUiThread(new Runnable() {@Overridepublic void run() {Toast.makeText(MainActivity.this,"登录成功",Toast.LENGTH_SHORT).show();//如果需要跳转可在这里进行跳转页面//登录成功跳转到软件首页页面Intent intent=new Intent(MainActivity.this,Main2Activity.class);startActivity(intent);}});}else if (event == SMSSDK.EVENT_GET_VOICE_VERIFICATION_CODE){runOnUiThread(new Runnable() {@Overridepublic void run() {Toast.makeText(MainActivity.this,"语音验证发送",Toast.LENGTH_SHORT).show();}});}else if (event == SMSSDK.EVENT_GET_VERIFICATION_CODE){//获取验证码成功runOnUiThread(new Runnable() {@Overridepublic void run() {Toast.makeText(MainActivity.this,"验证码已发送",Toast.LENGTH_SHORT).show();}});}else if (event == SMSSDK.EVENT_GET_SUPPORTED_COUNTRIES){Log.i("test","test");}}else{((Throwable)data).printStackTrace();Throwable throwable = (Throwable) data;throwable.printStackTrace();Log.i("1234",throwable.toString());try {JSONObject obj = new JSONObject(throwable.getMessage());final String des = obj.optString("detail");if (!TextUtils.isEmpty(des)){runOnUiThread(new Runnable() {@Overridepublic void run() {Toast.makeText(MainActivity.this,des,Toast.LENGTH_SHORT).show();}});}} catch (JSONException e) {e.printStackTrace();}}}};//注册一个事件回调监听,用于处理SMSSDK接口请求的结果SMSSDK.registerEventHandler(eh);buttonCode.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {phoneNum = editTextPhoneNum.getText().toString();if(!phoneNum.isEmpty()){if(Utils.checkTel(phoneNum)){//利用正则表达式获取检验手机号// 获取验证码SMSSDK.getVerificationCode("86", phoneNum);}else{Toast.makeText(getApplicationContext(),"请输入有效的手机号",Toast.LENGTH_LONG).show();}}else {Toast.makeText(getApplicationContext(),"请输入手机号",Toast.LENGTH_LONG).show();return;}phoneNum = editTextPhoneNum.getText().toString();}});buttonLogin.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {code = editTextCode.getText().toString();if(!code.isEmpty()){//提交验证码SMSSDK.submitVerificationCode("86", phoneNum, code);}else{Toast.makeText(getApplicationContext(),"请输入验证码",Toast.LENGTH_LONG).show();return;}}});}// 使用完EventHandler需注销,否则可能出现内存泄漏@Overrideprotected void onDestroy() {super.onDestroy();SMSSDK.unregisterEventHandler(eh);}}
3.新建java类 Utils
public class Utils {/*** 正则匹配手机号码:*/public static boolean checkTel(String tel){Pattern p = pile("^[1][3,4,5,7,8,9][0-9]{9}$");Matcher matcher = p.matcher(tel);return matcher.matches();}}