您好,登錄后才能下訂單哦!
在Android 中使用ContentObserver怎么獲取短信驗證碼并實現自動填充?很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。
步驟:
首先我使用了ContentObserver監聽短信,(最好知道您的驗證碼從那個號碼發過來)
然后從短信中用正則的分組去拿到驗證碼(當然驗證碼必須是什么格式)
貼出關鍵代碼:
注冊監聽短信數據庫的
ContentObserver c=new ContentObserver(han) { @Override public void onChange(boolean selfChange) { // TODO Auto-generated method stub super.onChange(selfChange); han.sendEmptyMessage(0); } }; getContentResolver().registerContentObserver(Uri.parse("content://sms"), true, c); Handler han = new Handler() { @SuppressWarnings("deprecation") public void handleMessage(android.os.Message msg) { String codestr = null; try { codestr = Cus_UnitTools.getsmsyzm(Reg_ForgetPassword.this); code.setText(codestr); requestcode(); } catch (Exception e) { Log.e("yung", "驗證碼提取失敗:" + codestr); } }; }; public static String getsmsyzm(Activity c) { Uri uri = Uri.parse("content://sms/inbox"); String[] projection = new String[] { "address", "person", "body" }; String selection = " address='" + JTPHONE + "' "; String[] selectionArgs = new String[] {}; String sortOrder = "date desc"; @SuppressWarnings("deprecation") Cursor cur = c.managedQuery(uri, projection, selection, selectionArgs, sortOrder); if(cur!=null&&cur.getCount()>0){ cur.moveToFirst(); String body = cur.getString(cur.getColumnIndex("body")).replaceAll( "\n", " "); cur.close(); return getyzm(body, YZMLENGTH); } cur.close(); return null; } /** * 從短信字符竄提取驗證碼 * @param body 短信內容 * @param YZMLENGTH 驗證碼的長度 一般6位或者4位 * @return 接取出來的驗證碼 */ public static String getyzm(String body, int YZMLENGTH) { // 首先([a-zA-Z0-9]{YZMLENGTH})是得到一個連續的六位數字字母組合 // (?<![a-zA-Z0-9])負向斷言([0-9]{YZMLENGTH})前面不能有數字 // (?![a-zA-Z0-9])斷言([0-9]{YZMLENGTH})后面不能有數字出現 Pattern p = Pattern .compile("(?<![a-zA-Z0-9])([a-zA-Z0-9]{" + YZMLENGTH + "})(?![a-zA-Z0-9])"); Matcher m = p.matcher(body); if (m.find()) { System.out.println(m.group()); return m.group(0); } return null; } //有些驗證碼是純數字的那么直接用這個就可以了 //Pattern p = Pattern.compile("(?<![0-9])([0-9]{" + YZMLENGTH+ "})(?![0-9])");
監聽完成后記得getContentResolver().unregisterContentObserver(c);
注銷監聽
這樣子就可以監聽到短信數據庫的變化了記住還需要加入權限順便列出短信權限
<!-- 發送短信--> <uses-permission Android:name="android.permission.SEND_SMS" /> <!-- 閱讀消息 --> <uses-permission android:name="android.permission.READ_SMS" /> <!-- 寫入消息 --> <uses-permission android:name="android.permission.WRITE_SMS" /> <!-- 接收消息 --> <uses-permission android:name="android.permission.RECEIVE_SMS" />
看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。