編輯:關於Android編程
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); } }); }
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持本站。
一.功能描述因為是自己開發了一個app應用,沒資格去申請微信支付和支付寶支付,於是就采用了銀聯支付功能,銀聯支付分為了兩種環境:測試環境和生產環境,一般前期開發的時候都是
前言:本文主要描述Android BLE的一些基礎知識及相關操作流程,不牽扯具體的業務實現,其中提供了針對廣播包及響應包的解析思路,希望對正在或即將面臨Android B
最近項目上需要實現藍牙傳輸apk的一個功能,能夠搜索周圍的藍牙手機並分享文件。從需求上講android手機自帶的藍牙傳輸模塊就可以滿足需要了,實現也很簡單。不過讓人頭疼的
前言 為了保證每周一篇的進度,又由於Vitamio新版本沒有發布, 決定推遲本地播放的一些功能(截圖、視頻時間、尺寸等),跳過直接寫在線播放部分的章節。從V