亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Android實現(xiàn)短信驗證碼自動填寫功能

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

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

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

  • 1、在需要輸入驗證碼的Activity代碼注冊監(jiān)聽短信的廣播
  • 2、攔截短信,獲取其中的驗證碼
  • 3、回寫到EditText
private SmsReciver smsReciver = new SmsReciver(); 
/** 收到短信Action **/ 
    String ACTION_SMS_RECIVER = "android.provider.Telephony.SMS_RECEIVED"; 
  /** 
   * 注冊廣播接受者監(jiān)聽短信驗證碼自動回寫 可在onCreate()中進行注冊; 
   */ 
  private void registSmsReciver() { 
    IntentFilter filter = new IntentFilter(); 
    filter.addAction(ACTION_SMS_RECIVER); 
    // 設(shè)置優(yōu)先級 不然監(jiān)聽不到短信  
    filter.setPriority(1000); 
    registerReceiver(smsReciver, filter); 
    } 
 
     /** 
    * 短信廣播接受者 用戶監(jiā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); 
        // 短息的手機號,如果你們公司發(fā)送驗證碼的號碼是固定的這里可以進行一個號碼的校驗 
         String from = sms.getOriginatingAddress(); 
         Log.d("log", "from   " + from); 
         analysisVerify(message); 
 
      } 
     } 
 
  } 
 
   /** 
   * 解析短信并且回寫 這里解析的是純數(shù)字的短信,如果小伙伴的驗證碼包含字母的話,可用正則替換 
   * 
   * @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(); 
    // 取消短信廣播注冊 
    if (smsReciver != null) { 
      unregisterReceiver(smsReciver); 
      smsReciver = null; 
    } 
  } 

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

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

filter.setPriority(1000); 

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

為什么還不能保證了?

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

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

相關(guān)文章

最新評論