AndroidはBroadcastReceiver方式で自動認証コードを取得します。


Android自動取得認証コードの2つの方法は、それぞれBroadcastReceiverとContentObserverであり、両方とも登録、登録をキャンセルする必要があります。
権限を追加したことを覚えています。まずその中の一つを紹介します。
<uses-permission android:name=“android.permission.RECEIVE_”SMS'/>
<uses-permission android:name=“android.permission.WRITE_”EXTERNAL_STORAGE"/>
<uses-permission android:name=“android.permission.READ_”SMS'/>
方式一:BroadcastReceiverカスタム放送

/**
 * Created by weifeiyang on 2016/7/29 0029.
 */

import android.annotation.TargetApi;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Build;
import android.telephony.SmsMessage;
import android.util.Log;

/**
 *     
 *
 * @author
 */
public class SMSBroadcastReceiver extends BroadcastReceiver {

  private static MessageListener mMessageListener;
  public static final String SMS_RECEIVED_ACTION = "android.provider.Telephony.SMS_RECEIVED";//            、  

  @TargetApi(Build.VERSION_CODES.M)
  @Override
  public void onReceive(Context context, Intent intent) {
    if (intent.getAction().equals(SMS_RECEIVED_ACTION)) {
      //      
      Object[] pdus = (Object[]) intent.getExtras().get("pdus");
      //     , GSM CDMA         
      String format = intent.getStringExtra("format");

      if (null != pdus) {
        for (Object pdu : pdus) {
          Log.e("pdu", "format" + format);
          //23       createFromPdu  ,    format    
          SmsMessage smsMessage = SmsMessage.createFromPdu((byte[]) pdu, format);
          //    -                
          String sender = smsMessage.getDisplayOriginatingAddress();
          //    
          String content = smsMessage.getDisplayMessageBody();
          if (content.contains("             ")){
            mMessageListener.onReceived(content);
            abortBroadcast();//         ,          
          }
        }
      }

    }

  }

  //    
  public interface MessageListener {
    public void onReceived(String message);
  }

  public void setOnReceivedMessageListener(MessageListener messageListener) {
    this.mMessageListener = messageListener;
  }
}

formatに関する説明は以下の通りであり、3 GPPと3 GPP 2が識字されている。
3 GPP
     3 GPPはGSM携帯電話向けであり、拡張子は3 GPPである。第3世代パートナーシッププロジェクト(3 rdGeneration Partneration PartneraphProject、すなわち3 GPP)は、1998年12月に設立された標準化機関です。現在のメンバーはヨーロッパのETSI、日本のARIB、TTC、中国のCCSA、韓国のTTA、北米のATISが含まれています。
    3 GPPの目標は、ITUのIMT-2000計画の範囲内でグローバル(第3世代)携帯電話システム仕様を作成し、実現することである。GSM(登録商標)からUMTS(WCDMA)への進化に力を入れており、GSM(登録商標)からWCDMA(WCDMA)への無線インターフェースの違いは大きいが、そのコアネットワークはGPRSの枠組みを採用しており、継続性を維持している。
3 GPP 2
   3 GPP 2はCDMA携帯電話向けであり、拡張子は.3 g 2である。第3世代パートナーシッププロジェクト2(3 rdGeneration Partneration PartneraphProject 2、すなわち3 GPP 2)は1998年12月に設立され、メンバーはTIA(北米)、CCSA(中国)、ARIB/TTC(日本)、TTA(韓国)を含む。
    3 GPP 2は、ITUのIMT-2000計画における(3 G)携帯電話システムの仕様を世界的に発展させることに力を尽くしており、実際には2 GのCDMA OneまたはIS-95から発展したCDMA 2000標準システムの標準化機構であり、多くのCDMAキー技術特許を持つ高通公司から多くの支持を受けている。
    3 GPPと3 GPP 2の両者は実際に一定の競争関係があり、3 GPP 2はIS-95(北米と韓国では幅広いCDMA標準を適用し、CDMAと互換性がある)で3 Gに移行することに努めており、高通公司との関係はより緊密である。これに対応する3 GPPはGSMからWCDMA(UMTS)への移行に注力しており、両機関はある程度の競争がある。
放送があったら使えます。activityやfragmentのオンクレットメソッドでinitSMSB roadcastReceiver()を呼び出して登録します。オンデマンド()で通します。
//メールの傍受ラジオの取消し
this.unregister Receiver(mSMSB roadcastReceiver);登録をキャンセルする

/**
   *          
   */
  private void initSMSBroadcastReceiver() {
    //      
    mSMSBroadcastReceiver = new SMSBroadcastReceiver(mContent);
    //               
    IntentFilter intentFilter = new IntentFilter(SMSBroadcastReceiver.SMS_RECEIVED_ACTION);
    //     
    intentFilter.setPriority(Integer.MAX_VALUE);
    //    
    this.registerReceiver(mSMSBroadcastReceiver, intentFilter);
    mSMSBroadcastReceiver.setOnReceivedMessageListener(new SMSBroadcastReceiver.MessageListener() {
      @Override
      public void onReceived(String message) {
        TLog.error("message" + message);
        String code = ReadSmsContent.getDynamicPassword(message);
        seCodeEditText.setText(code);
      }
    });
  }
以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。