Androidはメール認証コードの自動記入機能を実現

3087 ワード

この例では、Androidによるメール認証コードの自動記入機能について説明します.
実現の構想は簡単です.
  • 1、認証コードの入力が必要なActivityコードに傍受メールを登録するブロードキャスト
  • 2、メッセージをブロックし、その中の検証コード
  • を取得する
  • 3、EditText
  • に返信
    
    private SmsReciver smsReciver = new SmsReciver(); 
    /**     Action **/ 
        String ACTION_SMS_RECIVER = "android.provider.Telephony.SMS_RECEIVED"; 
      /** 
       *                      onCreate()     ; 
       */ 
      private void registSmsReciver() { 
        IntentFilter filter = new IntentFilter(); 
        filter.addAction(ACTION_SMS_RECIVER); 
        //                 
        filter.setPriority(1000); 
        registerReceiver(smsReciver, filter); 
        } 
     
         /** 
        *               ,        
        */ 
         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); 
             //       
             String message = sms.getMessageBody(); 
             Log.d("log", "message   " + message); 
            //       ,                                
             String from = sms.getOriginatingAddress(); 
             Log.d("log", "from   " + from); 
             analysisVerify(message); 
     
          } 
         } 
     
      } 
     
       /** 
       *                      ,               ,       
       * 
       * @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; 
        } 
      } 

    コードロジックが簡単であることがわかりますが、注意すべき点はいくつかあります.ここで使用するコード登録ブロードキャストは、グローバルブロードキャストの形式を取らない理由は2日間あり、高バージョンのapiでは、グローバルのメール傍受を登録すると失効します.また、業務については、認証コードを入力したActivityでしか使用できません.コード登録の形式を採用し、現在のActivityが破棄されたときにブロードキャスト登録をキャンセルすることで、私たちの予想に合致し、アプリケーションの性能を向上させます.
    2つ目の注意すべき問題は優先度の問題です.
    
    filter.setPriority(1000); 
    

    ここでは優先度を最大に設定していることがわかります.私たちのアプリケーションができるだけメールを受け取ることを保証します.注意して、私は「できるだけ」を使っています.つまり、メールの自動記入が必ず成功するとは保証できません.ある仲間は、優先度を最高に設定したのではないかと聞くかもしれません.
    どうしてまだ保証できないの?
    理由は実は簡単で、あなたはメールを傍受する優先度を最大に設定することができて、同じように、他のアプリケーションもメールの傍受の優先度を最大に設定することができます.例えば、あなたの携帯電話には360セキュリティガードがインストールされています.あなたの会社の認証コードを迷惑メールと見なしています.この時、メールのブロックは失効しました.
    以上が本文のすべての内容で、みんなの学習に役立つことを望みます.