標籤:提取 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模式擷取簡訊用正則自己主動填充驗證碼