亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Android自動獲取短信驗證碼功能

發布時間:2020-09-03 23:07:54 來源:腳本之家 閱讀:477 作者:ganchuanpu 欄目:移動開發

先給大家展示下效果圖,如果大家感覺不錯,請參考實現代碼。

Android自動獲取短信驗證碼功能

1.自定義監聽類

/**
 * 短信監聽器,用于自動填充驗證碼
*/
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";//短息發送提供商
  private String smsID = "";
  //短信觀察者 收到一條短信時 onchange方法會執行兩次,所以比較短信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.在登錄頁面事件化監聽類

//實例化短信監聽器
SMSContentObserver mObserver = new SMSContentObserver(getActivity(), new Handler(), mEt_auth_code);
// 注冊短信變化監聽
mContext.getContentResolver().registerContentObserver(Uri.parse("content://sms/"), true, mObserver);

3.聲明讀取短信權限

<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.為了防止內存泄漏,記得注銷監聽

@Override
public void onDestroy() {
super.onDestroy();
  //注銷短信監聽   
  mContext.getContentResolver().unregisterContentObserver(mObserver);
} 

小結:

去短信庫獲取短信比較不容易被攔截

以上所述是小編給大家介紹的Android自動獲取短信驗證碼功能,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對億速云網站的支持!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

调兵山市| 乐陵市| 剑河县| 绥宁县| 宝丰县| 凤山县| 靖安县| 侯马市| 临沧市| 香河县| 大渡口区| 宁远县| 康平县| 耒阳市| 绥阳县| 虹口区| 株洲市| 内江市| 若尔盖县| 宁陕县| 玉屏| 交口县| 贺兰县| 彰化县| 威信县| 精河县| 苍溪县| 鹤峰县| 锦州市| 墨竹工卡县| 合水县| 荔浦县| 绥化市| 宽甸| 高安市| 高陵县| 中牟县| 阿瓦提县| 龙里县| 翼城县| 郓城县|