国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

Android采取BroadcastReceiver方式自動獲取驗證碼

2019-12-12 05:49:16
字體:
來源:轉載
供稿:網友

Android 自動獲取驗證碼的兩種方式分別是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的解釋如下,3GPP與3GPP2掃盲

3GPP

     3GPP是針對GSM手機,擴展名為.3gp。第三代合作伙伴計劃(3rdGenerationPartnershipProject,即3GPP)是一個成立于1998年12月的標準化機構。目前其成員包括歐洲的ETSI、日本的ARIB和TTC、中國的CCSA、韓國的TTA和北美的ATIS。
    3GPP的目標是在ITU的IMT-2000計劃范圍內制訂和實現全球性的(第三代)行動電話系統規范。它致力于GSM到UMTS(WCDMA)的演化,雖然GSM到WCDMA空中接口差別很大,但是其核心網采用了GPRS的框架,因此仍然保持延續性。

3GPP2

   3GPP2是針對CDMA手機,擴展名為.3g2。第三代合作伙伴計劃2(3rdGenerationPartnershipProject2,即3GPP2)建立于1998年12月,成員包括:TIA(北美)、CCSA(中國)、ARIB/TTC(日本)和TTA(韓國)。
    3GPP2致力于使ITU的IMT-2000計劃中的(3G)行動電話系統規范在全球的發展,實際上它是從2G的CDMAOne或者IS-95發展而來的CDMA2000標準體系的標準化機構,它受到擁有多項CDMA關鍵技術專利的高通公司的較多支持。

    3GPP和3GPP2兩者實際上存在一定競爭關系,3GPP2致力于以IS-95(在北美和韓國應用廣泛的CDMA標準,聯通CDMA與之兼容)向3G過渡,和高通公司關系更加緊密。與之對應的3GPP致力于從GSM向WCDMA(UMTS)過渡,因此兩個機構存在一定競爭。

廣播有了后就可以使用了,在activity或者fragment的onCreate方法中調用initSMSBroadcastReceiver()進行注冊,在onDestroy()中通過
//注銷短信監聽廣播
this.unregisterReceiver(mSMSBroadcastReceiver);取消注冊

/**   * 初始化短信監聽廣播   */  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);      }    });  }

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 紫阳县| 榕江县| 阳春市| 阳泉市| 阳曲县| 万载县| 深州市| 策勒县| 明溪县| 尚志市| 广丰县| 衡阳市| 和顺县| 黄石市| 龙门县| 日喀则市| 鄂州市| 乌恰县| 灵川县| 金华市| 凭祥市| 大同县| 甘泉县| 雷州市| 合作市| 泾源县| 仪陇县| 西乌| 新绛县| 灌南县| 东阳市| 花莲市| 天台县| 富民县| 云和县| 垣曲县| 汽车| 陈巴尔虎旗| 肇源县| 泽库县| 临泉县|