欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Android短信驗(yàn)證碼(用的Mob短信驗(yàn)證)

 更新時(shí)間:2017年05月24日 13:52:53   作者:屠龍灬世家  
這篇文章主要為大家詳細(xì)介紹了Android短信驗(yàn)證碼,使用Mob短信驗(yàn)證,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

Android短信驗(yàn)證碼功能,供大家參考,具體內(nèi)容如下

1、參考資料

Mob網(wǎng)站:http://www.mob.com/

Mob在Github上的例子:https://github.com/MobClub/SMSSDK-for-Android

教程:Mob短信驗(yàn)證的具體使用

教程的源代碼:  http://git.oschina.net/lizhanqi/MobSMSDemo

Dialog教程:Android Dialog對(duì)話框

定時(shí)器教程:Android 實(shí)現(xiàn)定時(shí)器的四種方式 

2、前期準(zhǔn)備

(1)Mob網(wǎng)站上下載SMS對(duì)應(yīng)的SDK,解壓出來為圖1,打開圖1,將其中的文件拷貝到as項(xiàng)目中的libs文件夾下,另外在add as library。

圖1

圖2

(2)在as項(xiàng)目中的AndroidManifest.xml文件中添加圖3所需權(quán)限,由于SMS權(quán)限為危險(xiǎn)權(quán)限,所以還要?jiǎng)討B(tài)申請(qǐng),這在下面代碼中會(huì)有體現(xiàn)。注意權(quán)限是寫在application外面,不是里面。

圖3

(3)如果圖4中的targetSdkVersion大于22,那么在代碼中必須動(dòng)態(tài)申請(qǐng)權(quán)限。

圖4

(4)在as項(xiàng)目中的圖7中的build.gradle文件中添加圖5和圖6紅色框中內(nèi)容。

圖5

圖6

圖7

(5)在Mob網(wǎng)站上申請(qǐng)App Key和App Secret。

圖8

(6)Toast

3、代碼(沒整理,將就看)

package com.gxu.lepao.activity;

import android.Manifest;
import android.app.Dialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.os.CountDownTimer;
import android.os.Handler;
import android.os.Message;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AlertDialog;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import com.gxu.lepao.R;
import com.gxu.lepao.model.UserInfo;
import org.litepal.crud.DataSupport;//LitePal開源數(shù)據(jù)庫(kù)框架
import java.util.List;
import cn.smssdk.EventHandler;//Mob短信驗(yàn)證碼
import cn.smssdk.SMSSDK;//Mob短信驗(yàn)證碼

/**
 * Created by ljy on 2017-05-21.
 * 獲取和驗(yàn)證短信驗(yàn)證碼界面
 */

public class RegisterActivity extends BaseActivity {

 private EditText phoneEdit;
 private EditText smsEdit;
 private Button getSms;
 private Button submitSms;
 private TextView login;
 private TextView reset;
 private CountDownTimer countDownTimer;
 //倒計(jì)時(shí)
 private int TIME = 60;
 //這是中國(guó)區(qū)號(hào),如果需要其他國(guó)家列表,可以使用getSupportedCountries();獲得國(guó)家區(qū)號(hào)
 public String country = "86";
 //APPKEY
 private static String appKey = "1e0d15118480d";
 // 填寫從短信SDK應(yīng)用后臺(tái)注冊(cè)得到的APPSECRET
 private static String appSecret = "daa97d794e2436abcae624ac3785d2ef";
 //表示是否使用了registerEventHandler
 private boolean ready;


 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  Log.d("RegisterActivity","Task; id is " + getTaskId());
  setContentView(R.layout.activity_register);
  // 初始化界面
  initView();
  //初始化SMSSDK
  initSDK();
  getSms.setOnClickListener(new View.OnClickListener(){
   @Override
   public void onClick(View v) {
    boolean isLogin = false;
    //判斷手機(jī)號(hào)碼是否已注冊(cè)過
    isLogin = isRegister();
    if(!TextUtils.isEmpty(phoneEdit.getText().toString())){
     if(!isLogin){
       //發(fā)送短信權(quán)限
      if(ContextCompat.checkSelfPermission(RegisterActivity.this
        ,Manifest.permission.RECEIVE_SMS) != PackageManager.PERMISSION_GRANTED){
       //顯示申請(qǐng)權(quán)限彈窗
       showRequestPermission();
      }else{
       //彈窗確認(rèn)
       alterWarning();
      }
     }else{
      Toast.makeText(RegisterActivity.this,"此手機(jī)號(hào)碼已經(jīng)注冊(cè)過",Toast.LENGTH_SHORT).show();
     }
    }else{
     Toast.makeText(RegisterActivity.this,"請(qǐng)輸入手機(jī)號(hào)碼",Toast.LENGTH_SHORT).show();
    }
   }
  });
  submitSms.setOnClickListener(new View.OnClickListener(){
   @Override
   public void onClick(View v) {
    String sms = smsEdit.getText().toString();
    String phone = phoneEdit.getText().toString();
    if(!TextUtils.isEmpty(sms)){
     SMSSDK.submitVerificationCode( country, phone, sms);
    }else{
     Toast.makeText(RegisterActivity.this,"請(qǐng)輸入驗(yàn)證碼",Toast.LENGTH_SHORT).show();
    }
   }
  });
  login.setOnClickListener(new View.OnClickListener(){
   @Override
   public void onClick(View v) {
    Intent intent = new Intent(RegisterActivity.this,LoginActivity.class);
    startActivity(intent);
   }
  });
  reset.setOnClickListener(new View.OnClickListener(){
   @Override
   public void onClick(View v) {
    Intent intent = new Intent(RegisterActivity.this,ResetPwdActivity.class);
    startActivity(intent);
   }
  });
 }

 //申請(qǐng)權(quán)限彈窗
 private void showRequestPermission(){
  //先new出一個(gè)監(jiān)聽器,設(shè)置好監(jiān)聽
  DialogInterface.OnClickListener dialogOnclicListener=new DialogInterface.OnClickListener(){
   @Override
   public void onClick(DialogInterface dialog, int which) {
    switch(which){
     case Dialog.BUTTON_POSITIVE:
      //接收短信權(quán)限
      ActivityCompat.requestPermissions(RegisterActivity.this,new String[]{Manifest.permission.RECEIVE_SMS},1);
      //發(fā)送短信權(quán)限
      ActivityCompat.requestPermissions(RegisterActivity.this,new String[]{Manifest.permission.SEND_SMS},2);
      //彈窗確認(rèn)
      alterWarning();
      break;
     case Dialog.BUTTON_NEGATIVE:
      Toast.makeText(RegisterActivity.this, "拒絕" + which, Toast.LENGTH_SHORT).show();
      break;
    }
   }
  };
  //dialog參數(shù)設(shè)置
  AlertDialog.Builder builder=new AlertDialog.Builder(RegisterActivity.this); //先得到構(gòu)造器
  builder.setTitle("申請(qǐng)權(quán)限"); //設(shè)置標(biāo)題
  builder.setMessage("要允許lepao接收驗(yàn)證碼短信嗎?"); //設(shè)置內(nèi)容
  builder.setIcon(R.mipmap.ic_launcher);//設(shè)置圖標(biāo),圖片id即可
  builder.setPositiveButton("允許",dialogOnclicListener);
  builder.setNegativeButton("拒絕", dialogOnclicListener);
  builder.create().show();
 }

 //申請(qǐng)權(quán)限
 public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
  switch (requestCode){
   case 1:
    if(grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED){
     //initSDK();
     Toast.makeText(this,"你授權(quán)。。。接收短信權(quán)限",Toast.LENGTH_SHORT).show();
    }else{
     Toast.makeText(this,"你拒絕。。。接收短信權(quán)限",Toast.LENGTH_SHORT).show();
    }
    break;
   case 2:
    if(grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED){
     Toast.makeText(this,"你授權(quán)。。。發(fā)送短信權(quán)限",Toast.LENGTH_SHORT).show();
    }else{
     Toast.makeText(this,"你拒絕。。。發(fā)送短信權(quán)限",Toast.LENGTH_SHORT).show();
    }
    break;
   default:
  }
 }

 // 初始化短信SDK
 private void initSDK() {
  SMSSDK.initSDK(this, appKey, appSecret, true);
  //final Handler handler = new Handler();
  EventHandler eventHandler = new EventHandler() {
   public void afterEvent(int event, int result, Object data) {
    //回調(diào)完成
    if (result == SMSSDK.RESULT_COMPLETE)
    {
     //驗(yàn)證碼驗(yàn)證成功
     if (event == SMSSDK.EVENT_SUBMIT_VERIFICATION_CODE)
     {
      toast("驗(yàn)證成功");
      Intent intent = new Intent(RegisterActivity.this,SetPwdActivity.class);
      intent.putExtra("phone",phoneEdit.getText().toString());
      startActivity(intent);
      finish();
     }
     //已發(fā)送驗(yàn)證碼
     else if (event == SMSSDK.EVENT_GET_VERIFICATION_CODE)
     {
      toast("驗(yàn)證碼已經(jīng)發(fā)送");
     } else
     {
      ((Throwable) data).printStackTrace();
      String str = data.toString();
      toast(str);
     }
    }
    if(result==SMSSDK.RESULT_ERROR) {
     toast("驗(yàn)證碼錯(cuò)誤");
    }

   }
  };
  // 注冊(cè)回調(diào)監(jiān)聽接口
  SMSSDK.registerEventHandler(eventHandler);
  ready = true;
 }

 //吐司的一個(gè)小方法
 private void toast(final String str) {
  runOnUiThread(new Runnable() {
   @Override
   public void run() {
    Toast.makeText(RegisterActivity.this, str, Toast.LENGTH_SHORT).show();
   }
  });
 }


 //銷毀短信注冊(cè)
 @Override
 protected void onDestroy() {
  // 注銷回調(diào)接口registerEventHandler必須和unregisterEventHandler配套使用,否則可能造成內(nèi)存泄漏。
  if(ready){
   SMSSDK.unregisterAllEventHandler();
  }
  super.onDestroy();
 }

 //初始化界面
 private void initView(){
  phoneEdit = (EditText) findViewById(R.id.phone);
  smsEdit = (EditText) findViewById(R.id.sms);
  getSms = (Button) findViewById(R.id.getSms);
  submitSms = (Button) findViewById(R.id.submitSms);
  login = (TextView) findViewById(R.id.login);
  reset = (TextView) findViewById(R.id.reset);
 }

 //彈窗確認(rèn)
 private void alterWarning(){
  //先new出一個(gè)監(jiān)聽器,設(shè)置好監(jiān)聽
  DialogInterface.OnClickListener dialogOnclicListener=new DialogInterface.OnClickListener(){
   @Override
   public void onClick(DialogInterface dialog, int which) {
    switch(which){
     case Dialog.BUTTON_POSITIVE:
      dialog.dismiss();
      //通過sdk發(fā)送短信驗(yàn)證(請(qǐng)求獲取短信驗(yàn)證碼,在監(jiān)聽(eventHandle)中返回)
      SMSSDK.getVerificationCode(country, phoneEdit.getText().toString());
      //設(shè)置獲取驗(yàn)證碼按鈕不能點(diǎn)擊
      getSms.setClickable(false);
      //倒計(jì)時(shí),執(zhí)行次數(shù)為(TIME+1)*1000/1000,countDownTimer每次執(zhí)行間隔:1000(單位為毫秒)
      countDownTimer = new CountDownTimer((TIME+1)*1000, 1000) {
       @Override
       public void onTick(long millisUntilFinished) {
        getSms.setText(TIME-- + "秒后再次獲取驗(yàn)證碼");
       }

       @Override
       public void onFinish() {
        //設(shè)置獲取驗(yàn)證碼按鈕可以點(diǎn)擊
        getSms.setClickable(true);
        getSms.setText("點(diǎn)擊獲取短信驗(yàn)證碼");
       }
      };
      countDownTimer.start();
      break;
     case Dialog.BUTTON_NEGATIVE:
      dialog.dismiss();
      Toast.makeText(RegisterActivity.this, "已取消", Toast.LENGTH_SHORT).show();
      break;
    }
   }
  };
  //dialog參數(shù)設(shè)置
  AlertDialog.Builder builder=new AlertDialog.Builder(this); //先得到構(gòu)造器
  builder.setTitle("發(fā)送短信"); //設(shè)置標(biāo)題
  builder.setMessage("我們將把驗(yàn)證碼發(fā)送到以下號(hào)碼:\n"+country+"-"+phoneEdit.getText().toString()); //設(shè)置內(nèi)容
  builder.setIcon(R.drawable.icon);//設(shè)置圖標(biāo),圖片id即可
  builder.setPositiveButton("確認(rèn)",dialogOnclicListener);
  builder.setNegativeButton("取消", dialogOnclicListener);
  builder.create().show();
 }

 //判斷手機(jī)號(hào)碼是否已注冊(cè)過
 public boolean isRegister(){
  boolean isLogin = false;
  。。。。。299   return isLogin;
 }


}

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Flutter簡(jiǎn)潔實(shí)用的圖片編輯器的實(shí)現(xiàn)

    Flutter簡(jiǎn)潔實(shí)用的圖片編輯器的實(shí)現(xiàn)

    本文主要介紹了Flutter簡(jiǎn)潔實(shí)用的圖片編輯器的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • Flutter實(shí)現(xiàn)打印功能的示例詳解

    Flutter實(shí)現(xiàn)打印功能的示例詳解

    這篇文章主要為大家詳細(xì)介紹了如何通過?Flutter?實(shí)現(xiàn)調(diào)用打印機(jī)打印的功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-03-03
  • Android Service生命周期詳解

    Android Service生命周期詳解

    這篇文章主要介紹了Android Service生命周期詳解,本篇文章通過簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-09-09
  • 詳解dex優(yōu)化對(duì)Arouter查找路徑的影響

    詳解dex優(yōu)化對(duì)Arouter查找路徑的影響

    dex簡(jiǎn)單說就是優(yōu)化后的android版.exe。每個(gè)apk安裝包里都有。相對(duì)于PC上的java虛擬機(jī)能運(yùn)行.class,android上的Davlik虛擬機(jī)能運(yùn)行.dex。本文將著重介紹dex優(yōu)化對(duì)Arouter查找路徑的影響
    2021-06-06
  • Android NDK開發(fā)詳細(xì)介紹

    Android NDK開發(fā)詳細(xì)介紹

    本文主要介紹Android NDK開發(fā),這里詳細(xì)整理了相關(guān)資料并介紹 NDK的知識(shí)和開發(fā)流程及簡(jiǎn)單示例代碼,幫助大家學(xué)習(xí),有需要的小伙伴可以參考下
    2016-09-09
  • 查看 Android Studio NDK流程詳解

    查看 Android Studio NDK流程詳解

    這篇文章主要為大家介紹了查看 Android Studio NDK流程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-12-12
  • Android實(shí)現(xiàn)可復(fù)用的選擇頁(yè)面

    Android實(shí)現(xiàn)可復(fù)用的選擇頁(yè)面

    這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)可復(fù)用的選擇頁(yè)面,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-06-06
  • Android實(shí)現(xiàn)圓形圖片效果

    Android實(shí)現(xiàn)圓形圖片效果

    這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)圓形圖片效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-06-06
  • Android開發(fā)登陸案例

    Android開發(fā)登陸案例

    這篇文章主要介紹了Android開發(fā)登陸案例的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2016-07-07
  • Android SeekBar實(shí)現(xiàn)平滑滾動(dòng)

    Android SeekBar實(shí)現(xiàn)平滑滾動(dòng)

    這篇文章主要為大家詳細(xì)介紹了Android SeekBar實(shí)現(xiàn)平滑滾動(dòng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-03-03

最新評(píng)論