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

Android實(shí)現(xiàn)短信驗(yàn)證碼自動(dòng)填寫功能

 更新時(shí)間:2015年12月28日 16:38:35   作者:_Hi_xiaoyu  
這篇文章主要介紹了Android實(shí)現(xiàn)短信驗(yàn)證碼自動(dòng)填寫功能,感興趣的小伙伴們可以參考一下

本實(shí)例為大家分享了Android實(shí)現(xiàn)短信驗(yàn)證碼自動(dòng)填寫功能,供大家參考,具體內(nèi)容如下

實(shí)現(xiàn)思路很簡單:

  • 1、在需要輸入驗(yàn)證碼的Activity代碼注冊(cè)監(jiān)聽短信的廣播
  • 2、攔截短信,獲取其中的驗(yàn)證碼
  • 3、回寫到EditText
private SmsReciver smsReciver = new SmsReciver(); 
/** 收到短信Action **/ 
    String ACTION_SMS_RECIVER = "android.provider.Telephony.SMS_RECEIVED"; 
  /** 
   * 注冊(cè)廣播接受者監(jiān)聽短信驗(yàn)證碼自動(dòng)回寫 可在onCreate()中進(jìn)行注冊(cè); 
   */ 
  private void registSmsReciver() { 
    IntentFilter filter = new IntentFilter(); 
    filter.addAction(ACTION_SMS_RECIVER); 
    // 設(shè)置優(yōu)先級(jí) 不然監(jiān)聽不到短信  
    filter.setPriority(1000); 
    registerReceiver(smsReciver, filter); 
    } 
 
     /** 
    * 短信廣播接受者 用戶監(jiān)聽短信,自動(dòng)填寫驗(yàn)證碼 
    */ 
     private class SmsReciver extends BroadcastReceiver { 
 
    @Override 
    public void onReceive(Context context, Intent intent) { 
      Object[] objs = (Object[]) intent.getExtras().get("pdus"); 
       for (Object obj : objs) { 
         yte[] pdu = (byte[]) obj; 
         SmsMessage sms = SmsMessage.createFromPdu(pdu); 
         // 短信的內(nèi)容 
         String message = sms.getMessageBody(); 
         Log.d("log", "message   " + message); 
        // 短息的手機(jī)號(hào),如果你們公司發(fā)送驗(yàn)證碼的號(hào)碼是固定的這里可以進(jìn)行一個(gè)號(hào)碼的校驗(yàn) 
         String from = sms.getOriginatingAddress(); 
         Log.d("log", "from   " + from); 
         analysisVerify(message); 
 
      } 
     } 
 
  } 
 
   /** 
   * 解析短信并且回寫 這里解析的是純數(shù)字的短信,如果小伙伴的驗(yàn)證碼包含字母的話,可用正則替換 
   * 
   * @param message 
   */ 
  private void analysisVerify(String message) { 
    char[] msgs = message.toCharArray(); 
     StringBuffer sb = new StringBuffer(); 
    for (int i = 0; i < msgs.length; i++) { 
      if ('0' <= msgs[i] && msgs[i] <= '9') { 
              sb.append(msgs[i]); 
      } 
    } 
 
    mEtVerifyCode.setText(sb.toString()); 
   } 
 
  @Override 
  protected void onDestroy() { 
    super.onDestroy(); 
    // 取消短信廣播注冊(cè) 
    if (smsReciver != null) { 
      unregisterReceiver(smsReciver); 
      smsReciver = null; 
    } 
  } 

可以看到代碼邏輯比較簡單,需要注意的有幾點(diǎn)。我們這里用的代碼注冊(cè)廣播,之所以不采取全局廣播的形式原因有兩天,在高版本的api,注冊(cè)全局的短信監(jiān)聽會(huì)失效。而且就業(yè)務(wù)而言,我們監(jiān)聽短信只會(huì)在輸入驗(yàn)證碼的Activity里面才會(huì)用到,采用代碼注冊(cè)的形式,在當(dāng)前Activity銷毀的時(shí)候取消廣播注冊(cè),更符合我們的預(yù)期,提高應(yīng)用的性能。

第二個(gè)需要注意的問題是優(yōu)先級(jí)的問題。

filter.setPriority(1000); 

可以看到,我們這里把優(yōu)先級(jí)設(shè)置成了最大。保證我們的應(yīng)用能夠盡可能的接受到短信。注意,我使用的是“盡可能”,也就是說我們不能保證短信自動(dòng)填寫一定能執(zhí)行成功,有個(gè)小伙伴可能會(huì)問,我們不是把優(yōu)先級(jí)設(shè)置成了最高了嗎?

為什么還不能保證了?

原因其實(shí)很簡單,你能把監(jiān)聽短信的優(yōu)先級(jí)設(shè)置成最大,同樣的,其他的應(yīng)用也能把短信監(jiān)聽的優(yōu)先級(jí)設(shè)置成最大。比如說,你的手機(jī)安裝有360安全衛(wèi)士,把你們公司的驗(yàn)證碼視為垃圾短信攔截了,這個(gè)時(shí)候短信攔截就失效了。

以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助。

相關(guān)文章

最新評(píng)論