Android自動獲取短信驗證碼功能
先給大家展示下效果圖,如果大家感覺不錯,請參考實現(xiàn)代碼。

1.自定義監(jiān)聽類
/**
* 短信監(jiān)聽器,用于自動填充驗證碼
*/
public class SMSContentObserver extends ContentObserver {
public final String SMS_URI_INBOX = "content://sms/inbox";//收信箱
private Activity activity = null;
private String smsContent = "";//驗證碼
private EditText verifyText = null;//驗證碼編輯框
private String SMS_ADDRESS_PRNUMBER = "10690329013589";//短息發(fā)送提供商
private String smsID = "";
//短信觀察者 收到一條短信時 onchange方法會執(zhí)行兩次,所以比較短信id,如果一致則不處理
public SMSContentObserver(Activity activity, Handler handler, EditText verifyText) {
super(handler);
this.activity = activity;
this.verifyText = verifyText;
}
@Override
public void onChange(boolean selfChange) {
super.onChange(selfChange);
Cursor cursor = null;// 光標
// 讀取收件箱中指定號碼的短信
cursor = activity.getContentResolver().query(Uri.parse(SMS_URI_INBOX),
new String[]{"_id", "address", "body", "read"}, //要讀取的屬性
"address=? and read=?", //查詢條件是什么
new String[]{SMS_ADDRESS_PRNUMBER, "0"},//查詢條件賦值
"date desc");//排序
if (cursor != null) {
cursor.moveToFirst();
if (cursor.moveToFirst()) {
//比較和上次接收到短信的ID是否相等
if (!smsID.equals(cursor.getString(cursor.getColumnIndex("_id")))) {
String smsbody = cursor.getString(cursor.getColumnIndex("body"));
//用正則表達式匹配驗證碼
Pattern pattern = Pattern.compile("[0-9]{6}");
Matcher matcher = pattern.matcher(smsbody);
if (matcher.find()) {//匹配到6位的驗證碼
smsContent = matcher.group();
if (verifyText != null && null != smsContent && !"".equals(smsContent)) {
verifyText.requestFocus();//獲取焦點
verifyText.setText(smsContent);//設置文本
verifyText.setSelection(smsContent.length());//設置光標位置
}
}
smsID = cursor.getString(cursor.getColumnIndex("_id"));
}
}
}
}
}
2.在登錄頁面事件化監(jiān)聽類
//實例化短信監(jiān)聽器
SMSContentObserver mObserver = new SMSContentObserver(getActivity(), new Handler(), mEt_auth_code);
// 注冊短信變化監(jiān)聽
mContext.getContentResolver().registerContentObserver(Uri.parse("content://sms/"), true, mObserver);
3.聲明讀取短信權(quán)限
<uses-permission android:name="android.permission.RECEIVE_SMS" /> <uses-permission android:name="android.permission.READ_SMS" /> <uses-permission android:name="android.permission.WRITE_SMS" />
4.為了防止內(nèi)存泄漏,記得注銷監(jiān)聽
@Override
public void onDestroy() {
super.onDestroy();
//注銷短信監(jiān)聽
mContext.getContentResolver().unregisterContentObserver(mObserver);
}
小結(jié):
去短信庫獲取短信比較不容易被攔截
以上所述是小編給大家介紹的Android自動獲取短信驗證碼功能,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
相關文章
Android貝塞爾曲線初步學習第三課 Android實現(xiàn)添加至購物車的運動軌跡
這篇文章主要為大家詳細介紹了Android貝塞爾曲線初步學習第三課,Android實現(xiàn)添加至購物車的運動軌跡,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-03-03
淺談Android studio 生成apk文件時的 key store path 的問題
這篇文章主要介紹了淺談Android studio 生成apk文件時的 key store path 的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-03-03
詳解Android使用Html.fromHtml需要注意的地方
本篇文章主要介紹了詳解Android使用Html.fromHtml需要注意的地方,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-07-07
android圖庫播放幻燈片時按power鍵滅屏再亮屏顯示keyguard
圖庫在播放幻燈片時,按power鍵滅屏,然后再亮屏,會發(fā)現(xiàn)幻燈片繼續(xù)在播放,沒有顯示keyguard,如何在亮屏后顯示解鎖界面,具體實現(xiàn)方法如下,感興趣的朋友可以參考下哈2013-06-06
Android 使用URLConnection下載音頻文件的方法
有時候我們會需要下載音頻文件。這里提供一種思路,將在線音頻文件通過流寫到本地文件中。需要的朋友可以參考下2019-09-09
Flutter實現(xiàn)密碼強度校驗結(jié)果的示例詳解
我們經(jīng)常在一些網(wǎng)站上看到這樣的密碼強度指示,使用三段線,分別用不同的顏色來表示弱密碼、中等強度密碼和強密碼,本篇我們就用?Flutter?來實現(xiàn)這樣一個密碼強度校驗示例,希望對大家有所幫助2023-08-08
Android kotlin使用注解實現(xiàn)防按鈕連點功能的示例
這篇文章主要介紹了Android kotlin使用注解實現(xiàn)防按鈕連點功能的示例,幫助大家更好的理解和學習使用Android,感興趣的朋友可以了解下2021-03-03

