安卓ContentObserver模式擷取簡訊用正則自己主動填充驗證碼

來源:互聯網
上載者:User

標籤:提取   string   接收   eth   catch   write   _for   組合   pil   

近期做注冊的時候看到非常多app在手機接受到簡訊的時候直接填寫驗證碼到介面省略使用者自己主動輸入,感覺這樣確實蠻人性化的呵呵。於是自己也做了一個

步驟:

首先我使用了ContentObserver監聽簡訊,(最好知道您的驗證碼從那個號碼發過來)

然後從簡訊中用正則的分組去拿到驗證碼(當然驗證碼必須是什麼格式)

貼出關鍵代碼:

注冊監聽簡訊資料庫的  

ContentObserver c=new ContentObserver(han) {@Overridepublic void onChange(boolean selfChange) {// TODO Auto-generated method stubsuper.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" />

 

 

demo就不寫了呵呵這裡非常清楚也非常easy..不喜勿噴。有錯回帖。轉載必備 尊重作者-yung7086

 

安卓ContentObserver模式擷取簡訊用正則自己主動填充驗證碼

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.