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

首頁 > 系統 > Android > 正文

Android采取ContentObserver方式自動獲取驗證碼

2019-12-12 05:48:55
字體:
來源:轉載
供稿:網友

Android 自動獲取驗證碼的兩種方式分別是BroadcastReceiver及ContentObserver,兩種方式都需要進行注冊、取消注冊兩個步驟
記得添加權限,本文介紹ContentObserver方式。

照舊先上ContentObserver代碼

/** * Created by weifeiyang on 2016/7/29 0029. */import android.app.Activity;import android.content.SharedPreferences;import android.database.ContentObserver;import android.database.Cursor;import android.net.Uri;import android.os.Handler;import android.text.TextUtils;import android.widget.EditText;import java.util.regex.Matcher;import java.util.regex.Pattern;/** * 讀取短信驗證碼,并設置驗證碼 * Created by cool on 2016/1/4. */public class ReadSmsContent extends ContentObserver { private Cursor cursor = null; private Activity mActivity; private EditText mEditText; public ReadSmsContent(Handler handler, Activity activity, EditText editText) {  super(handler);  this.mActivity = activity;  this.mEditText = editText; } @Override public void onChange(boolean selfChange, Uri uri) { /*  第一次回調 不是我們想要的 直接返回  目前發現每次收到新短信都會走好幾次onChange(),  可以通過這個方法來使得onChange中的方法只走一次 */  if (uri.toString().equals("content://sms/raw")) {   return;  }  /*   讀取收件箱中的短信   address 發件人手機號碼:   body 信息內容:   read 是否查看:   date 發送時間:   */  cursor = mActivity.getContentResolver().query(Uri.parse("content://sms/inbox"),    new String[]{"_id", "address", "body", "read"}, null, null, "_id desc");//按降序排列//  指定號碼//  mActivity.managedQuery(Uri.parse("content://sms/inbox"),//    new String[]{"_id", "address", "body", "read"}, "address=? and read=?", new String[]{"10086", "0"}, "_id desc");  if (null != cursor && cursor.getCount() > 0) {   cursor.moveToNext();//指向首位   int smsbodyColumn = cursor.getColumnIndex("body");//body位置   String smsBody = cursor.getString(smsbodyColumn);//獲取內容   String verifyCode = getDynamicPassword(smsBody);   if (TextUtils.isEmpty(verifyCode)) {    return;   }   if (mEditText == null) {    throw new RuntimeException("你傳的EditText為空");   }   if (verifyCode.contains("你從服務器上獲取到的驗證碼"))) {    mEditText.setText(verifyCode);    //EditText獲取焦點,3個屬性必須同時設置    mEditText.setFocusable(true);    mEditText.setFocusableInTouchMode(true);    mEditText.requestFocus();    mEditText.setSelection(verifyCode.length());//設置光標位置   }  }  if (!cursor.isClosed()) {   cursor.close();  } } /**  * 從字符串中截取連續4位數字  * 用于從短信中獲取動態密碼  *  * @param str 短信內容  * @return 截取得到的4位動態密碼  */ public static String getDynamicPassword(String str) {  Pattern continuousNumberPattern = Pattern.compile("[0-9//.]+");  Matcher m = continuousNumberPattern.matcher(str);  String dynamicPassword = "";  while (m.find()) {   if (m.group().length() == 4) {    dynamicPassword = m.group();   }  }  return dynamicPassword; }}

觀察者有了后就可以使用了,在activity或者fragment的onCreate方法中調用initSmSContentObserver()進行注冊,在onDestroy()中通過
//注銷內容監聽者
this.getContentResolver().unregisterContentObserver(readSmsContent);
取消注冊

 /**  * 初始化短信監聽數據庫  */ private void initSmSContentObserver() {  readSmsContent = new ReadSmsContent(new Handler(), this, seCodeEditText);  //注冊短信內容監聽  this.getContentResolver().registerContentObserver(Uri.parse("content://sms/"), true, readSmsContent); }

上述兩種方式獲取到短信后,目前由于短信平臺來源賬號不固定,因此是通過驗證碼進行校驗。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 固原市| 昭通市| 且末县| 苍溪县| 安庆市| 民乐县| 马山县| 周宁县| 桓台县| 凉山| 新河县| 扎兰屯市| 嘉善县| 萨迦县| 东源县| 桓台县| 托克托县| 多伦县| 花莲县| 丁青县| 永康市| 嘉荫县| 阿城市| 平顺县| 景德镇市| 潼南县| 瑞安市| 牟定县| 新余市| 平南县| 中宁县| 屏山县| 平泉县| 二连浩特市| 钟祥市| 安阳市| 茶陵县| 山阴县| 灵寿县| 德令哈市| 浏阳市|