Android采取BroadcastReceiver方式自動獲取驗證碼
Android 自動獲取驗證碼的兩種方式分別是BroadcastReceiver及ContentObserver,兩種方式都需要進行注冊、取消注冊兩個步驟
記得添加權(quán)限,本文先介紹其中一種。
<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;
/**
* 短信監(jiān)聽
*
* @author
*/
public class SMSBroadcastReceiver extends BroadcastReceiver {
private static MessageListener mMessageListener;
public static final String SMS_RECEIVED_ACTION = "android.provider.Telephony.SMS_RECEIVED";//只要注冊聲明權(quán)限即可收到、阻斷
@TargetApi(Build.VERSION_CODES.M)
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(SMS_RECEIVED_ACTION)) {
//獲得短信數(shù)據(jù)
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參數(shù)即可
SmsMessage smsMessage = SmsMessage.createFromPdu((byte[]) pdu, format);
//發(fā)送號碼-可以過濾需要讀取的短信的發(fā)送號碼
String sender = smsMessage.getDisplayOriginatingAddress();
//短信內(nèi)容
String content = smsMessage.getDisplayMessageBody();
if (content.contains("你從服務(wù)器上獲取到的驗證碼")){
mMessageListener.onReceived(content);
abortBroadcast();//中斷廣播的繼續(xù)傳遞,防止優(yōu)先級低的獲取到
}
}
}
}
}
//回調(diào)接口
public interface MessageListener {
public void onReceived(String message);
}
public void setOnReceivedMessageListener(MessageListener messageListener) {
this.mMessageListener = messageListener;
}
}
其中關(guān)于format的解釋如下,3GPP與3GPP2掃盲
3GPP
3GPP是針對GSM手機,擴展名為.3gp。第三代合作伙伴計劃(3rdGenerationPartnershipProject,即3GPP)是一個成立于1998年12月的標準化機構(gòu)。目前其成員包括歐洲的ETSI、日本的ARIB和TTC、中國的CCSA、韓國的TTA和北美的ATIS。
3GPP的目標是在ITU的IMT-2000計劃范圍內(nèi)制訂和實現(xiàn)全球性的(第三代)行動電話系統(tǒng)規(guī)范。它致力于GSM到UMTS(WCDMA)的演化,雖然GSM到WCDMA空中接口差別很大,但是其核心網(wǎng)采用了GPRS的框架,因此仍然保持延續(xù)性。
3GPP2
3GPP2是針對CDMA手機,擴展名為.3g2。第三代合作伙伴計劃2(3rdGenerationPartnershipProject2,即3GPP2)建立于1998年12月,成員包括:TIA(北美)、CCSA(中國)、ARIB/TTC(日本)和TTA(韓國)。
3GPP2致力于使ITU的IMT-2000計劃中的(3G)行動電話系統(tǒng)規(guī)范在全球的發(fā)展,實際上它是從2G的CDMAOne或者IS-95發(fā)展而來的CDMA2000標準體系的標準化機構(gòu),它受到擁有多項CDMA關(guān)鍵技術(shù)專利的高通公司的較多支持。
3GPP和3GPP2兩者實際上存在一定競爭關(guān)系,3GPP2致力于以IS-95(在北美和韓國應用廣泛的CDMA標準,聯(lián)通CDMA與之兼容)向3G過渡,和高通公司關(guān)系更加緊密。與之對應的3GPP致力于從GSM向WCDMA(UMTS)過渡,因此兩個機構(gòu)存在一定競爭。
廣播有了后就可以使用了,在activity或者fragment的onCreate方法中調(diào)用initSMSBroadcastReceiver()進行注冊,在onDestroy()中通過
//注銷短信監(jiān)聽廣播
this.unregisterReceiver(mSMSBroadcastReceiver);取消注冊
/**
* 初始化短信監(jiān)聽廣播
*/
private void initSMSBroadcastReceiver() {
//生成廣播處理
mSMSBroadcastReceiver = new SMSBroadcastReceiver(mContent);
//實例化過濾器并設(shè)置要過濾的廣播
IntentFilter intentFilter = new IntentFilter(SMSBroadcastReceiver.SMS_RECEIVED_ACTION);
//優(yōu)先級最高
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);
}
});
}
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
- Android BroadcastReceiver實現(xiàn)網(wǎng)絡(luò)狀態(tài)實時監(jiān)聽
- Android BroadcastReceiver接收收到短信的廣播
- Android運用BroadcastReceiver實現(xiàn)強制下線
- Android BroadcastReceiver廣播注冊方式總結(jié)
- android之BroadcastReceiver應用詳解
- 深入Android中BroadcastReceiver的兩種注冊方式(靜態(tài)和動態(tài))詳解
- Android BroadcastReceiver常見監(jiān)聽整理
- Android BroadcastReceiver廣播機制概述
- 詳解Android中BroadCastReceiver組件
- Android使用BroadcastReceiver監(jiān)聽網(wǎng)絡(luò)連接狀態(tài)的改變
相關(guān)文章
Android ViewPager制作新手導航頁(動態(tài)加載)
這篇文章主要為大家詳細介紹了Android ViewPager制作新手導航頁,了解什么是動態(tài)加載指示器,感興趣的小伙伴們可以參考一下2016-05-05
Android菜單的定義及ActionBar的實現(xiàn)
本篇文章主要介紹了Android菜單的定義及ActionBar的實現(xiàn),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-08-08
Android自定義EditText實現(xiàn)登錄界面
這篇文章主要為大家詳細介紹了Android自定義EditText實現(xiàn)登錄界面,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-12-12
Android 實現(xiàn)無網(wǎng)絡(luò)傳輸文件的示例代碼
本篇文章主要介紹了Android 實現(xiàn)無網(wǎng)絡(luò)傳輸文件的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-02-02
Android JSON數(shù)據(jù)與實體類之間的相互轉(zhuǎn)化(GSON的用法)
這篇文章主要介紹了Android JSON數(shù)據(jù)與實體類之間的相互轉(zhuǎn)化(GSON的用法),非常具有實用價值,需要的朋友可以參考下。2017-01-01
Android實現(xiàn)知乎選項卡動態(tài)隱藏效果實例
選項卡相信對大家來說應該不陌生,最近發(fā)現(xiàn)知乎選項卡的動態(tài)隱藏效果不錯,下面這篇文章主要給大家介紹了關(guān)于Android實現(xiàn)知乎選項卡動態(tài)隱藏效果的相關(guān)資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考借鑒,下面隨著小編來一起學習學習吧。2018-02-02
Android fragment 轉(zhuǎn)場動畫創(chuàng)建步驟
在 Android 中,可以使用 setCustomAnimations() 方法來繪制自定義的 Fragment 轉(zhuǎn)場動畫,本文分步驟給大家介紹的非常詳細,感興趣的朋友跟隨小編一起看看吧2024-03-03

