<ImageView
android:id="@+id/iv_address_manager"
android:layout_width=“match_parent”
android:layout_height=“wrap_content”
android:scaleType=“fitXY”
android:src="@mipmap/user_center_orther" />
<LinearLayout
android:layout_width=“match_parent”
android:layout_height=“wrap_content”
android:background="#3090E6"
android:orientation=“vertical”>
<RelativeLayout
android:layout_width=“match_parent”
android:layout_height=“wrap_content”
android:layout_marginTop=“30dp”
android:gravity=“center_vertical”>
<TextView
android:layout_width=“wrap_content”
android:layout_height=“wrap_content”
android:layout_centerVertical=“true”
android:layout_marginLeft=“15dp”
android:text=“我的”
android:textColor="#FFF"
android:textSize=“18sp” />
<ImageView
android:id="@+id/tv_user_setting"
android:layout_width=“30dp”
android:layout_height=“30dp”
android:layout_alignParentRight=“true”
android:layout_marginRight=“15dp”
android:src="@mipmap/user_center_setting" />
<ImageView
android:id="@+id/iv_user_notice"
android:layout_width=“30dp”
android:layout_height=“30dp”
android:layout_marginRight=“40dp”
android:layout_toLeftOf="@+id/tv_user_setting"
android:src="@mipmap/user_center_notice" />
LoginActivity.kt登录界面的操作,首先包括监听验证码的操作动作,发送验证码和验证验证码,其中增加了验证码的倒计时操作功能
package com.example.takeout.ui.activity
import android.annotation.SuppressLint
import android.os.Bundle
import android.os.Handler
import android.os.Message
import android.os.SystemClock
import android.text.TextUtils
import android.util.Log
import androidx.appcompat.app.AppCompatActivity
import cn.smssdk.EventHandler
import cn.smssdk.SMSSDK
import com.example.takeout.R
import com.heima.takeout.utils.SMSUtil
import com.mob.MobSDK
import kotlinx.android.synthetic.main.activity_login.*
class LoginActivity : AppCompatActivity() {
//监听每一次提交验证码操作
val eh = object : EventHandler() {
override fun afterEvent(event: Int, result: Int, data: Any) {
if (result == SMSSDK.RESULT_COMPLETE) {
//回调完成
if (event == SMSSDK.EVENT_SUBMIT_VERIFICATION_CODE) {
//提交验证码成功
Log.d(“LoginActivity”, “提交验证码成功”)
} else if (event == SMSSDK.EVENT_GET_VERIFICATION_CODE) {
//获取验证码成功
Log.d(“LoginActivity”, “获取验证码成功”)
} else if (event == SMSSDK.EVENT_GET_SUPPORTED_COUNTRIES) {
//返回支持发送验证码的国家列表
}
} else {
(data as Throwable).printStackTrace()
}
}
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_login)
initListener()
MobSDK.submitPolicyGrantResult(true, null);
//注册短信回调
SMSSDK.registerEventHandler(eh)
}
private fun initListener() {
iv_user_back.setOnClickListener { finish() }
//获取验证码
tv_user_code.setOnClickListener {
val phone = et_user_phone.text.toString().trim()
//验证手机号码
if (SMSUtil.judgePhoneNums(this, phone)) {
// 请求验证码,其中country表示国家代码,如“86”;phone表示手机号码,如“13800138000”
SMSSDK.getVerificationCode(“86”, phone)
//开启倒计时
tv_user_code.isEnabled = false
Thread(CutDownTask()).start()
}
}
iv_login.setOnClickListener {
//提交验证码
val phone = et_user_phone.text.toString().trim()
val code = et_user_code.text.toString().trim()
if (SMSUtil.judgePhoneNums(this, phone) && !TextUtils.isEmpty(code)) {
// 提交验证码,其中的code表示验证码,如“1357”
SMSSDK.submitVerificationCode(“86”, phone, code)
}
//登录外卖服务器
// loginActivityPresenter.loginByPhone(phone)
}
}
companion object {
val TIME_MINUS = -1 //剩余时间的消息
val TIME_IS_OUT = 0 //60s超时
}
//创建一个handler来刷新UI
val handler = @SuppressLint(“HandlerLeak”)
object : Handler(){
override fun handleMessage(msg: Message?) {
super.handleMessage(msg)
when(msg!!.what){
TIME_MINUS -> tv_user_code.text = “剩余时间(${time})秒”
TIME_IS_OUT -> {
tv_user_code.isEnabled = true
tv_user_code.text = “点击重发”
time = 60
}
}
}
}
//倒计时的实现60s
var time = 60
inner class CutDownTask: Runnable {
override fun run() {
//倒计时循环
while (time>0){
//刷新剩余时间,当前子线程,使用handler
handler.sendEmptyMessage(TIME_MINUS)
SystemClock.sleep(999)
time –
}
handler.sendEmptyMessage(TIME_IS_OUT)
}
}
// 使用完EventHandler需注销,否则可能出现内存泄漏
override fun onDestroy() {
super.onDestroy()
SMSSDK.unregisterEventHandler(eh)
}
}
SMSUtil.kt验证码的合理性校验
package com.heima.takeout.utils
import android.Manifest
import android.app.Activity
import android.content.pm.PackageManager
import android.os.Build
import android.text.TextUtils
import android.widget.Toast
import java.util.*
object SMSUtil {
/**
-
判断手机号码是否合理
-
y
*/
fun judgePhoneNums(activity: Activity, phoneNums: String): Boolean {
if (isMatchLength(phoneNums, 11) && isMobileNO(phoneNums)) {
return true
}
Toast.makeText(activity, “手机号码输入有误!”, Toast.LENGTH_SHORT).show()
return false
}
/**
- 验证手机格式
*/
fun isMobileNO(mobileNums: String): Boolean {
/*
-
移动:134、135、136、137、138、139、150、151、157(TD)、158、159、187、188
-
联通:130、131、132、152、155、156、185、186 电信:133、153、180、189、(1349卫通)
-
总结起来就是第一位必定为1,第二位必定为3或5或8,其他位置的可以为0-9
*/
val telRegex = “[1][358]\d{9}”// "[1]“代表第1位为数字1,”[358]“代表第二位可以为3、5、8中的一个,”\d{9}"代表后面是可以是0~9的数字,有9位。
if (TextUtils.isEmpty(mobileNums))
return false
else
return mobileNums.matches(telRegex.toRegex())
}
/**
-
判断一个字符串的位数
-
@param str
-
-
@param length
-
-
@return
*/
fun isMatchLength(str: String, length: Int): Boolean {
if (str.isEmpty()) {
return false
} else {
return if (str.length == length) true else false
}
}
/**
-
权限校验
-
@param activity
*/
fun checkPermission(activity: Activity) {
if (Build.VERSION.SDK_INT >= 23) {
val readPhone = activity.checkSelfPermission(Manifest.permission.READ_PHONE_STATE)
val receiveSms = activity.checkSelfPermission(Manifest.permission.RECEIVE_SMS)
val readSms = activity.checkSelfPermission(Manifest.permission.READ_SMS)
val readContacts = activity.checkSelfPermission(Manifest.permission.READ_CONTACTS)
val readSdcard = activity.checkSelfPermission(Manifest.permission.READ_EXTERNAL_STORAGE)
题外话
不管怎么样,不论是什么样的大小面试,要想不被面试官虐的不要不要的,只有刷爆面试题题做好全面的准备,当然除了这个还需要在平时把自己的基础打扎实,这样不论面试官怎么样一个知识点里往死里凿,你也能应付如流啊~
这里我为大家准备了一些我工作以来以及参与过的大大小小的面试收集总结出来的一套进阶学习的视频及面试专题资料包,点击这里免费分享给大家,主要还是希望大家在如今大环境不好的情况下面试能够顺利一点,希望可以帮助到大家~
最后如果马化腾把腾讯给你一天,你会来做什么?欢迎评论区讨论。
L_STORAGE)
题外话
不管怎么样,不论是什么样的大小面试,要想不被面试官虐的不要不要的,只有刷爆面试题题做好全面的准备,当然除了这个还需要在平时把自己的基础打扎实,这样不论面试官怎么样一个知识点里往死里凿,你也能应付如流啊~
这里我为大家准备了一些我工作以来以及参与过的大大小小的面试收集总结出来的一套进阶学习的视频及面试专题资料包,点击这里免费分享给大家,主要还是希望大家在如今大环境不好的情况下面试能够顺利一点,希望可以帮助到大家~
[外链图片转存中…(img-sgroFFTF-1646479217043)]
最后如果马化腾把腾讯给你一天,你会来做什么?欢迎评论区讨论。