最近做註冊的時候看到很多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})是得到一個連續的六位元字// (?
//有些驗證碼是純數位那麼直接用這個就可以了
//Pattern p = Pattern.compile("(?監聽完成後記得getContentResolver().unregisterContentObserver(c);登出監聽
這樣子就可以監聽到簡訊資料庫的變化了記住還需要加入許可權順便列出簡訊許可權
demo就不寫了呵呵這裡很清楚也很簡單..不喜勿噴,有錯回帖,轉載必備 尊重作者-yung7086