Android開發(fā)(10)——手機(jī)號(hào)驗(yàn)證登錄

本節(jié)內(nèi)容

1.EditText簡(jiǎn)介

2.Button簡(jiǎn)介

3.Bomb三方庫(kù)提供短信驗(yàn)證服務(wù)

4.首頁(yè)布局

5.實(shí)現(xiàn)手機(jī)號(hào)自動(dòng)分割

6.解決bug并刪除號(hào)碼

7.添加按鈕界面跳轉(zhuǎn)

8.使用selector設(shè)置按鈕點(diǎn)擊狀態(tài)顏色

9.按鈕文字顏色切換

10.解決格式化號(hào)碼轉(zhuǎn)換為正常號(hào)碼bug

11.布局驗(yàn)證頁(yè)面提示信息

12.將輸入的內(nèi)容顯示到小方格中

13.Bmob環(huán)境搭建

14.請(qǐng)求驗(yàn)證碼

15.驗(yàn)證輸入的驗(yàn)證碼

一嗅辣、EditText簡(jiǎn)介
1.它可以監(jiān)聽文本改變的事件
mPhoneEditText.addTextChangedListener(object:LoginTextWatcher(){
override fun afterTextChanged(s: Editable?) {
  }
override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {
      }
override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {           
     }
}
  • 這三個(gè)事件分別是: afterTextChanged(文本改變之后)、onTextChanged(文本正在改變)和beforeTextChanged(文本改變之前)
2.如果不想顯示EditText中的光標(biāo)祈坠,可以設(shè)置一下节沦,將它去除
android:cursorVisible="false"
3.輸入數(shù)字時(shí)评甜,如果覺得數(shù)字間的間距很小,可以設(shè)置一下把間距加大
 android:letterSpacing="0.1"
4.如果想要輸入內(nèi)容,但是又不想顯示輸入框旷档,那么就可以將它的透明度設(shè)置得小一點(diǎn)跛璧,這樣就可以將其隱藏起來严里。
android:alpha="0.01"
二、Button簡(jiǎn)介
1.通過text屬性設(shè)置按鈕的文本追城,顏色刹碾,文字大小等前面都講過,這里就不再詳述座柱。
2.給按鈕添加一個(gè)id之后迷帜,就可以給它設(shè)置點(diǎn)擊事件了。
3.比較特別的按鈕有switch色洞,也可以給switch設(shè)置點(diǎn)擊事件戏锹。switch有一個(gè)比較特別的屬性就是isChecked。在手機(jī)的設(shè)置里面可能會(huì)使用到switch火诸。
 switch1.setOnClickListener {
            val s = it as Switch
              if(s.isChecked){
                  mLogin.text = "打開了"
              }else{
                  mLogin.text = "關(guān)閉了"
              }
        }
4.還有checkBox按鈕锦针,這些屬性都比較簡(jiǎn)單,可以自行琢磨置蜀。
三奈搜、Bmob三方庫(kù)提供短信驗(yàn)證服務(wù)
1.先在Bmob注冊(cè)一個(gè)賬號(hào),進(jìn)入主頁(yè)之后盯荤,點(diǎn)擊左上角創(chuàng)建應(yīng)用
image.png
  • 我這里是已經(jīng)創(chuàng)建好了一個(gè)
2.回到網(wǎng)站首頁(yè)馋吗,點(diǎn)擊文檔進(jìn)入文檔中心。然后點(diǎn)擊數(shù)據(jù)服務(wù)的Android秋秤。
QQ圖片20210322181427.png
3.之后按照那一頁(yè)的提示操作即可宏粤。
  • 首先導(dǎo)入SDK
image.png
  • 反正跟著它一路向下操作即可脚翘。
  • 先在這里面添加底下那一行代碼,也就是倉(cāng)庫(kù)地址
allprojects { 
repositories {
 //Bmob的maven倉(cāng)庫(kù)地址--必填
        maven {url 'https://dl.bintray.com/chaozhouzhang/maven' }
  • 然后在app的buildGradle的android里面添加依賴庫(kù)
 useLibrary 'org.apache.http.legacy'
  • 然后在dependencies里面添加以下的依賴文件商架,然后同步一下堰怨。
 implementation 'cn.bmob.android:bmob-sdk:3.7.8'
    implementation "io.reactivex.rxjava2:rxjava:2.2.8"
    implementation 'io.reactivex.rxjava2:rxandroid:2.1.1'
    implementation 'com.squareup.okhttp3:okhttp:3.14.1'
    implementation 'com.squareup.okio:okio:2.2.2'
    implementation 'com.google.code.gson:gson:2.8.5'
  • 然后配置一下Mainfest,在里面添加以下權(quán)限
 <!-- 允許聯(lián)網(wǎng) -->
    <uses-permission android:name="android.permission.INTERNET" />
    <!-- 獲取GSM(2g)蛇摸、WCDMA(聯(lián)通3g)等網(wǎng)絡(luò)狀態(tài)的信息 -->
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <!-- 獲取wifi網(wǎng)絡(luò)狀態(tài)的信息 -->
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <!-- 保持CPU 運(yùn)轉(zhuǎn)备图,屏幕和鍵盤燈有可能是關(guān)閉的,用于文件上傳和下載 -->
    <uses-permission android:name="android.permission.WAKE_LOCK" />
    <!-- 獲取sd卡寫的權(quán)限,用于文件上傳和下載 -->
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <!-- 允許讀取手機(jī)狀態(tài) 用于創(chuàng)建BmobInstallation -->
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
  • 配置ContentProvider
 <provider
            android:name="cn.bmob.v3.util.BmobContentProvider"
            android:authorities="com.example.message.BmobContentProvider"
            android:exported="false">
        </provider>
  • 初始化Bomb赶袄,重新創(chuàng)建一個(gè)類揽涮,重寫onCreate()方法
class MyApplication:Application() {
    override fun onCreate() {
        super.onCreate()
        //第一.默認(rèn)初始化
        Bmob.initialize(this, "c12f5ff15568e1e18c72649071389bea");
    }
}
  • Application ID從之前創(chuàng)建的應(yīng)用的key里面查看。
image.png
  • 通過 requestSMSCode 方式給綁定手機(jī)號(hào)的該用戶發(fā)送指定短信模板的短信驗(yàn)證碼:
/**
 * TODO template 如果是自定義短信模板饿肺,此處替換為你在控制臺(tái)設(shè)置的自定義短信模板名稱蒋困;如果沒有對(duì)應(yīng)的自定義短信模板,則使用默認(rèn)短信模板敬辣。
 */
BmobSMS.requestSMSCode(phone, "DataSDK", new QueryListener<Integer>() {
    @Override
    public void done(Integer smsId, BmobException e) {
        if (e == null) {
            mTvInfo.append("發(fā)送驗(yàn)證碼成功雪标,短信ID:" + smsId + "\n");
        } else {
            mTvInfo.append("發(fā)送驗(yàn)證碼失敗:" + e.getErrorCode() + "-" + e.getMessage() + "\n");
        }
    }
});
四溉跃、首頁(yè)布局
我們要將界面布局成如下效果:
QQ圖片20210322190621.png

image.png
1.布局首頁(yè)的時(shí)候村刨,添加幾個(gè)guideline,這樣方便我們布局撰茎。
image.png
2.圖片是一個(gè)正方形嵌牺,我們之前講過,在右側(cè)屬性中龄糊,點(diǎn)擊那個(gè)矩形的左上角逆粹,讓它的比例為1:1。
3.中間添加一個(gè)EditText炫惩,調(diào)節(jié)一下它的大小僻弹。
4.給輸入框添加一個(gè)邊框,所以在drawable中新建一個(gè)名為shape_roundrect的xml文件他嚷,然后把<selector>改為<shape>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">

    <corners android:radius="10dp"/>
    <stroke android:color="@color/colorGray"
        android:width="1dp"/>
    <solid android:color="@color/colorAlphaGray"/>
</shape>
5.然后找到EditText奢方,把這個(gè)邊框應(yīng)用上
 android:background="@drawable/shape_roundrect"
6.為了有更多的顏色可以選擇,可以在values下添加一個(gè)colors.xml爸舒,在里面添加一些顏色
<resources>
    <color name="colorPrimary">#6200EE</color>
    <color name="colorPrimaryDark">#3700B3</color>
    <color name="colorAccent">#03DAC5</color>
    <color name="colorGray">#666</color>
    <color name="colorAlphaGray">#2666</color>
    <color name="colorRed">#FF0000</color>
    <color name="colorBlack">#000</color>
</resources>
7.想要輸入框內(nèi)部的內(nèi)容和邊框有一點(diǎn)間距,那么就可以設(shè)置一下padding稿蹲。(自己和自己的間距)
android:paddingStart="10dp"
8.給輸入框設(shè)置一下默認(rèn)提示文字
 android:hint="輸入手機(jī)號(hào)"
五扭勉、實(shí)現(xiàn)手機(jī)號(hào)自動(dòng)分割
1.我們平常輸入手機(jī)號(hào)碼時(shí),都會(huì)自動(dòng)分割為3 4 4 的形式苛聘。我們的實(shí)現(xiàn)思路為:時(shí)刻監(jiān)聽文本輸入涂炎,當(dāng)輸入了三個(gè)數(shù)字之后添加一個(gè)空格忠聚,當(dāng)輸入八個(gè)字符之后,再添加一個(gè)空格唱捣。所以我們要給EditText添加一個(gè)監(jiān)聽事件两蟀,時(shí)刻監(jiān)聽它的變化。
 mPhoneEditText.addTextChangedListener(object:LoginTextWatcher(){
            override fun afterTextChanged(s: Editable?) {
                //設(shè)置按鈕是否可以點(diǎn)擊
                mLogin.isEnabled = (s.toString().length == 13)

                //判斷是在刪除還是輸入
                if (!shouldAutoSplit) return
                s.toString().length.also {
                    if (it == 3 || it == 8) {
                        //需要添加空格
                        s?.append(" ")
                    }
                }
            }

            override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {
                  shouldAutoSplit =( count ==1)
            }
        })
2.對(duì)于TextWatcher監(jiān)聽器震缭,我們只會(huì)用到其中的兩個(gè)方法赂毯,但使用的時(shí)候還是不得不實(shí)現(xiàn)所有的方法。所以我們可以新建一個(gè)類拣宰,讓它繼承于TextWatcher党涕,然后空實(shí)現(xiàn)這個(gè)接口的所有方法。后面新建的對(duì)象繼承于我們創(chuàng)建的類即可巡社。
3.新建一個(gè)類膛堤,繼承TextWatcher。
open class LoginTextWatcher: TextWatcher{
    override fun afterTextChanged(s: Editable?) {

    }

    override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {

    }

    override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {

    }

}
4.當(dāng)字符串的長(zhǎng)度為3和8時(shí)晌该,需要添加空格肥荔。
 s.toString().length.also {
                    if (it == 3 || it == 8) {
                        //需要添加空格
                        s?.append(" ")
                    }
                }
5.因?yàn)檩斎氲臄?shù)字不超過11位,加上兩個(gè)空格朝群,就不超過13位燕耿。所以在EditText設(shè)置它的最大長(zhǎng)度位13.
 android:maxLength="13"
六、解決刪除bug并獲取號(hào)碼
1.經(jīng)過上面的操作潜圃,我們發(fā)現(xiàn)了一個(gè)bug缸棵。當(dāng)我們發(fā)現(xiàn)輸錯(cuò)號(hào)碼,想要?jiǎng)h除時(shí)谭期,結(jié)果到了空格那里堵第,發(fā)現(xiàn)空格刪不掉。
  • 因?yàn)楫?dāng)我們刪到第八個(gè)的時(shí)候隧出,它又執(zhí)行afterTextChanged方法踏志,結(jié)果發(fā)現(xiàn)長(zhǎng)度為8,又添加一個(gè)空格胀瞪,反反復(fù)復(fù)针余,所以刪不掉。
2.實(shí)驗(yàn)過程中凄诞,我們發(fā)現(xiàn)圆雁,在 onTextChanged方法中,添加數(shù)字的時(shí)候 count = 1帆谍,刪除數(shù)據(jù)的時(shí)候 count=0伪朽。所以我們可以根據(jù)count的值來判斷用戶是在增加還是刪除。所以我們可以定義一個(gè)變量來記錄這個(gè)汛蝙。
 private var shouldAutoSplit = true
3.在afterTextChanged方法中烈涮,加一個(gè)判斷是在刪除還是輸入朴肺。如果是在輸入的話,那么就執(zhí)行下面的添加空格坚洽。如果是在刪除的話戈稿,那么就return,就不會(huì)執(zhí)行添加空格的操作讶舰。
 if (!shouldAutoSplit) return
4.如果count = 1鞍盗,那么就是在做增加,那么 shouldAutoSplit = true绘雁,否則就是false
 override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {
                  shouldAutoSplit =( count ==1)
            }
5.因?yàn)樵谳斎氲臅r(shí)候添加了空格橡疼,所以到時(shí)候傳遞過去的數(shù)據(jù)可能也包含空格。為了避免出現(xiàn)這種情況庐舟,我們就要把它轉(zhuǎn)化為正常的數(shù)據(jù)欣除。
 private fun getPhoneNumber(editable: Editable):String{
        //創(chuàng)建一個(gè)新的對(duì)象 用于操作editable對(duì)象里面的內(nèi)容
        SpannableStringBuilder(editable.toString()).also {
            it.delete(3,4)
            it.delete(7,8)
            return it.toString()
        }
    }
七、添加按鈕界面跳轉(zhuǎn)
1.添加一個(gè)按鈕挪略,設(shè)置一個(gè)id历帚,然后給它設(shè)置一個(gè)點(diǎn)擊事件
2.因?yàn)橐D(zhuǎn)到另外一個(gè)界面,所以我們要準(zhǔn)備好另外一個(gè)界面杠娱。在這個(gè)監(jiān)聽事件中只需要啟動(dòng)一下頁(yè)面即可挽牢。
 mLogin.setOnClickListener{
            Intent().apply {
                //跳轉(zhuǎn)方向
                setClass(this@MainActivity,VerifyActivity::class.java)
                //配置跳轉(zhuǎn)攜帶的數(shù)據(jù)
                putExtra("phone",getPhoneNumber(mPhoneEditText.text))
                //啟動(dòng)
                startActivity(this)
            }
        }
3.跳轉(zhuǎn)過來的頁(yè)面需要接收一下數(shù)據(jù)
intent.getStringExtra("phone").also {
                //顯示號(hào)碼
                  mPhone.text = it
              }
八、使用selector設(shè)置按鈕點(diǎn)擊狀態(tài)顏色
1.輸入手機(jī)號(hào)的時(shí)候摊求,只有輸入了13位手機(jī)號(hào)禽拔,登錄按鈕才會(huì)被點(diǎn)擊,界面才會(huì)跳轉(zhuǎn)室叉。為了實(shí)現(xiàn)這個(gè)功能睹栖,我們?cè)O(shè)置一下按鈕的enabled屬性,當(dāng)它為fasle的時(shí)候茧痕,按鈕是不能被點(diǎn)擊的野来。
 android:enabled="false"
2.在afterTextChanged方法中設(shè)置按鈕是否可以點(diǎn)擊,只有當(dāng)位數(shù)為13時(shí)踪旷,按鈕才能被點(diǎn)擊曼氛。
   mLogin.isEnabled = (s.toString().length == 13)
3.為了讓用戶能夠直觀到感受到按鈕能否被點(diǎn)擊,我們可以讓按鈕在不同時(shí)刻變更不一樣的顏色令野。所以我們?cè)赿rawable中新建一個(gè)xml舀患。enabled狀態(tài)不同,顯示的顏色也不同气破。這樣就可以根據(jù)控件的狀態(tài)构舟,實(shí)現(xiàn)選擇器的效果。
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <!--
    根據(jù)控件的enable值 設(shè)置不同的顏色
    注意順序:特殊在前 常規(guī)在后
    enable狀態(tài) 運(yùn)行起來正常狀態(tài) enable = true 其他狀態(tài) enable = false
    從上至下匹配
    -->
     <item android:drawable="@color/colorAccent"  android:state_enabled="true"/>
    <item android:drawable="@color/colorAlphaGray" android:state_enabled="false"/>
</selector>
4.把selector整好了以后,在按鈕那里使用起來狗超,把它的背景選為這個(gè)xml文件
android:background="@drawable/btn_status_selector"
九、按鈕文字顏色切換
1.為了美觀朴下,我們希望登錄按鈕文字的顏色也隨用戶的輸入而變化努咐,所以我們?cè)賱?chuàng)建一個(gè)xml。不能點(diǎn)擊時(shí)殴胧,顏色為黑色渗稍。可以點(diǎn)擊時(shí)团滥,顏色為白色竿屹。
<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:state_enabled="false" android:color="@color/colorBlack"/>
    <item android:state_enabled="true" android:color="@color/colorRed"/>
</selector>
2.在code再把textColor改為這個(gè)drawable中的文件
 android:textColor="@drawable/btn_text_selector"
十、解決格式化號(hào)碼轉(zhuǎn)化為正常號(hào)碼bug
1.bug:當(dāng)我們輸入號(hào)碼時(shí)灸姊,它會(huì)按照3 4 4 的格式正常分割拱燃,然后我們進(jìn)行界面跳轉(zhuǎn)。再返回當(dāng)前界面時(shí)力惯,會(huì)發(fā)現(xiàn)顯示的是去空格后格式化的號(hào)碼碗誉,而不是3 4 4 形式的號(hào)碼。
2.要避免出現(xiàn)這種情況父晶,我們一開始就不能直接對(duì)editable進(jìn)行操作哮缺。必須先把里面的東西取出來,然后再進(jìn)行操作甲喝。所以我們用的是SpannableStringBuilder尝苇。
 SpannableStringBuilder(editable.toString()).also {
            it.delete(3,4)
            it.delete(7,8)
            return it.toString()
        }
這就是前面我們這樣使用的原因。
十一埠胖、布局驗(yàn)證頁(yè)面提示信息
1.輸入手機(jī)號(hào)之后糠溜,進(jìn)入驗(yàn)證碼驗(yàn)證頁(yè)面,也就是輸入驗(yàn)證碼
image.png
2.上方圖片調(diào)整為正方形押袍,然后添加幾個(gè)TextView即可诵冒。
3.輸入驗(yàn)證碼的地方有六個(gè)小邊框,每個(gè)框框?qū)?yīng)一個(gè)數(shù)字谊惭。最外面用一個(gè)EditText來包裹一下汽馋,小的框框是TextView。
4.添加六個(gè)TextView圈盔,讓文字居中
android:gravity="center"
5.給這六個(gè)TextView添加六個(gè)邊框豹芯,邊框就是在drawable中新建一個(gè)xml,然后設(shè)置一下<shape>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <stroke android:color="@color/colorPrimary" android:width="1dp"/>
    <solid android:color="@color/colorAlphaGray"/>
    <corners android:radius="6dp"/>
</shape>
6.然后在code里面把background設(shè)置為這個(gè)drawable中的文件驱敲。
7.拖動(dòng)一個(gè)EditText铁蹈,和這六個(gè)小框框重合,設(shè)置為match_parent众眨,并設(shè)置其透明度為0.01
十二握牧、將輸入的內(nèi)容顯示到小方格中
1.給每個(gè)小框框添加id容诬,為mv1——mv6。
2.讓EditText中的內(nèi)容顯示到每一個(gè)小方框中的方法:EditText中是一串字符串沿腰,字符串又有索引览徒。只需要將索引對(duì)應(yīng)的字符作為每一個(gè)小的TextView中的Text即可。
3.保存所有顯示驗(yàn)證碼的textView
 private val verifyViews:Array<TextView> by lazy {
        arrayOf(mv1,mv2,mv3,mv4,mv5,mv6)
    }
4.監(jiān)聽文本框內(nèi)容改變的事件
 mOrigin.addTextChangedListener(object:TextWatcher{
            override fun afterTextChanged(s: Editable?) {

            }

            override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {

            }

            override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {
}
}
5.這次我們只需要實(shí)現(xiàn)最后一個(gè)onTextChanged方法颂龙,所以后面的代碼都是寫在這個(gè)方法里面的习蓬。
6.將輸入的內(nèi)容拆分到每一個(gè)textView中,其中i是索引措嵌,item是字符躲叼。
for((i,item)in s?.withIndex()!!){
                   //獲取i對(duì)應(yīng)的textView
                   verifyViews[i].text = item.toString()
               }
7.如果位數(shù)小于6個(gè) 后面的文本框不顯示任何內(nèi)容。
 for(i in s.length..5){
                    verifyViews[i].text= ""
                }
8.設(shè)置Edit Text文本框最長(zhǎng)輸入長(zhǎng)度為6.
android:maxLength="6"
十三企巢、Bmob環(huán)境搭建
1.當(dāng)我們進(jìn)入輸入驗(yàn)證碼的界面的時(shí)候枫慷,我們希望終端能自動(dòng)向我們輸入的號(hào)碼發(fā)送短信。輸入驗(yàn)證碼之后包斑,它又會(huì)將接收到的驗(yàn)證碼和服務(wù)器發(fā)給用戶的驗(yàn)證碼進(jìn)行比較流礁,如果一致就返回一個(gè)結(jié)果,如果不一致就提示輸入錯(cuò)誤罗丰。這里我們就需要用到一個(gè)服務(wù)器發(fā)送短信神帅。
2.關(guān)于配置數(shù)據(jù)庫(kù)和依賴庫(kù)等,我已經(jīng)在前面寫過了萌抵。其中配置的應(yīng)用包名為applicationId后面顯示的內(nèi)容找御。
3.在Manifest里面配置一下name
android:name=".MyApplication"
十四、請(qǐng)求驗(yàn)證碼
1.不讓這個(gè)EditText被長(zhǎng)按绍填。
android:longClickable="false"
2.為了方便管理Bmob操作霎桅,我們創(chuàng)建一個(gè)類來管理關(guān)于Bmob的操作。
object BmobUtil {}
3.實(shí)現(xiàn)的功能就是①向服務(wù)器 請(qǐng)求發(fā)送驗(yàn)證碼讨永,完成之后有兩個(gè)返回值(發(fā)送成功滔驶、發(fā)送失敗)②驗(yàn)證用戶輸入的驗(yàn)證碼 (驗(yàn)證成功 卿闹、驗(yàn)證失斀腋狻)
4.先寫一個(gè)發(fā)送驗(yàn)證碼的方法,傳遞兩個(gè)參數(shù)锻霎,第一個(gè)是手機(jī)號(hào)著角,第二個(gè)是回調(diào)的結(jié)果。我們這里用高階函數(shù)作為返回的結(jié)果旋恼。
fun requestSMSCode(phone:String,callBack:(Int)->Unit){
           BmobSMS.requestSMSCode(phone,"",object:QueryListener<Int>(){
               override fun done(p0: Int?, p1: BmobException?) {
                   if(p1==null){
                        callBack(SUCCESS)
                   }else{
                        callBack(FAILURE)
                   }
               }
           } )
    }
  • 為了方便理解吏口,定義兩個(gè)靜態(tài)參數(shù)。
    const val SUCCESS = 0
    const val FAILURE = 1
5.對(duì)于客戶端來說,只要調(diào)用我們這里寫好的方法就可以發(fā)送短信了产徊。
override fun onResume() {
        super.onResume()
        BmobUtil.requestSMSCode(mPhone.text.toString()){
            if(it==BmobUtil.SUCCESS){
                Toast.makeText(this,"發(fā)送驗(yàn)證碼成功",Toast.LENGTH_SHORT).show()
            }else{
                Toast.makeText(this,"發(fā)送驗(yàn)證碼失敗",Toast.LENGTH_SHORT).show()
            }
        }
    }
十五昂勒、驗(yàn)證輸入的驗(yàn)證碼
1.在BmobUtil 類中重寫一下驗(yàn)證的方法。第一個(gè)參數(shù)為電話號(hào)碼舟铜,第二個(gè)參數(shù)為用戶輸入的驗(yàn)證碼叁怪,第三個(gè)參數(shù)為匿名內(nèi)部類。
fun verifySMSCode(phone:String,code:String,callBack: (Int) -> Unit){
        BmobSMS.verifySmsCode(phone,code,object :UpdateListener(){
            override fun done(p0: BmobException?) {
              if(p0==null){
                  //驗(yàn)證碼驗(yàn)證成功
                  callBack(SUCCESS)
              }else{
                  //驗(yàn)證失敗
                  callBack(FAILURE)
              }
            }
        })
    }
2.發(fā)送驗(yàn)證請(qǐng)求之后深滚,再判斷驗(yàn)證成功與否。如果成功涣觉,則進(jìn)行界面跳轉(zhuǎn)痴荐。如果失敗就提示一下,并清空文本框中的內(nèi)容官册。
 if(s.length==6){
                    //發(fā)起驗(yàn)證的請(qǐng)求
                 BmobUtil.verifySMSCode(mPhone.text.toString(),s.toString()){
                     if(it==BmobUtil.SUCCESS){
                            startActivity(Intent(this@VerifyActivity,HomeActivity::class.java))
                     }else{
                         Toast.makeText(this@VerifyActivity,"驗(yàn)證失敗",Toast.LENGTH_SHORT).show()
                        mOrigin.text.clear()
                     }
                 }
                }
3.自己創(chuàng)建一個(gè)簡(jiǎn)單的頁(yè)面生兆,作為驗(yàn)證成功后跳轉(zhuǎn)的界面。就改一下背景顏色即可膝宁。只要能分辨得出和前面的頁(yè)面不一樣都行鸦难。之后在manifest中注冊(cè)一下。
 <activity android:name=".HomeActivity"/>
所有的操作基本完成员淫,我們運(yùn)行之后合蔽,發(fā)送短信,如果是正確的號(hào)碼介返,就會(huì)收到這樣的短信拴事。
QQ圖片20210323200717.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市圣蝎,隨后出現(xiàn)的幾起案子刃宵,更是在濱河造成了極大的恐慌,老刑警劉巖徘公,帶你破解...
    沈念sama閱讀 216,744評(píng)論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件牲证,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡关面,警方通過查閱死者的電腦和手機(jī)坦袍,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,505評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來缭裆,“玉大人键闺,你說我怎么就攤上這事〕和眨” “怎么了辛燥?”我有些...
    開封第一講書人閱讀 163,105評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我挎塌,道長(zhǎng)徘六,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,242評(píng)論 1 292
  • 正文 為了忘掉前任榴都,我火速辦了婚禮待锈,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘嘴高。我一直安慰自己竿音,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,269評(píng)論 6 389
  • 文/花漫 我一把揭開白布拴驮。 她就那樣靜靜地躺著春瞬,像睡著了一般。 火紅的嫁衣襯著肌膚如雪套啤。 梳的紋絲不亂的頭發(fā)上宽气,一...
    開封第一講書人閱讀 51,215評(píng)論 1 299
  • 那天,我揣著相機(jī)與錄音潜沦,去河邊找鬼萄涯。 笑死,一個(gè)胖子當(dāng)著我的面吹牛唆鸡,可吹牛的內(nèi)容都是我干的涝影。 我是一名探鬼主播,決...
    沈念sama閱讀 40,096評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼喇闸,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼袄琳!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起燃乍,我...
    開封第一講書人閱讀 38,939評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤唆樊,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后刻蟹,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體逗旁,經(jīng)...
    沈念sama閱讀 45,354評(píng)論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,573評(píng)論 2 333
  • 正文 我和宋清朗相戀三年舆瘪,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了片效。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,745評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡英古,死狀恐怖淀衣,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情召调,我是刑警寧澤膨桥,帶...
    沈念sama閱讀 35,448評(píng)論 5 344
  • 正文 年R本政府宣布蛮浑,位于F島的核電站,受9級(jí)特大地震影響只嚣,放射性物質(zhì)發(fā)生泄漏沮稚。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,048評(píng)論 3 327
  • 文/蒙蒙 一册舞、第九天 我趴在偏房一處隱蔽的房頂上張望蕴掏。 院中可真熱鬧,春花似錦调鲸、人聲如沸盛杰。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,683評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)饶唤。三九已至,卻和暖如春贯钩,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背办素。 一陣腳步聲響...
    開封第一講書人閱讀 32,838評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工角雷, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人性穿。 一個(gè)月前我還...
    沈念sama閱讀 47,776評(píng)論 2 369
  • 正文 我出身青樓勺三,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親需曾。 傳聞我的和親對(duì)象是個(gè)殘疾皇子吗坚,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,652評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容