国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

Android 中使用ContentObserver模式獲取短信用正則自動填充驗證碼

2019-10-23 19:49:22
字體:
來源:轉載
供稿:網友

最近做注冊的時候看到很多app在手機接受到短信的時候直接填寫驗證碼到界面省略用戶自動輸入,感覺這樣確實蠻人性化的呵呵,于是自己也做了一個

步驟:

首先我使用了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" />

 以上所述是小編給大家介紹的Android 中使用ContentObserver模式獲取短信用正則自動填充驗證碼,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對VEVB武林網網站的支持!


注:相關教程知識閱讀請移步到Android開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 陵水| 巩留县| 资溪县| 务川| 兴山县| 福泉市| 府谷县| 崇州市| 达尔| 凌源市| 乐山市| 厦门市| 酒泉市| 青冈县| 巴林右旗| 英山县| 西林县| 甘谷县| 荆州市| 汉中市| 辉县市| 长春市| 三门县| 平顶山市| 周至县| 延安市| 东至县| 高淳县| 革吉县| 伊川县| 和龙市| 南靖县| 修文县| 二连浩特市| 梅州市| 衡南县| 南阳市| 新晃| 玉环县| 洞口县| 吉木乃县|