久久久精品一区ed2k-女人被男人叉到高潮的视频-中文字幕乱码一区久久麻豆樱花-俄罗斯熟妇真实视频

android截取驗證碼的兩種實現(xiàn)方式

在進行手機驗證碼驗證時,為了提升用戶體驗,實現(xiàn)自動截取驗證填充的行式,實現(xiàn)這個功能有兩種方法,分別是利用android的廣播機制和android的ContentObserver 實現(xiàn)。

創(chuàng)新互聯(lián)建站主要從事成都網(wǎng)站設(shè)計、成都網(wǎng)站制作、外貿(mào)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)青羊,十余年網(wǎng)站建設(shè)經(jīng)驗,價格優(yōu)惠、服務(wù)專業(yè),歡迎來電咨詢建站服務(wù):028-86922220

    第一種的實現(xiàn)方法如下: 

/**
  * 監(jiān)聽返回的驗證碼信息,并自動補充如驗證碼輸入框中 [一級方法]
  */
 public BroadcastReceiver getMessageReceive = new BroadcastReceiver() {
  String address;

  @Override
  public void onReceive(Context context, Intent intent) {
   Log.v(TAG+"--BroadcastReceiver --", "進入onReceive");
   String msgCode = null;
   if (intent.getAction().equals(
     "android.provider.Telephony.SMS_RECEIVED")) {
    Bundle bundle = intent.getExtras();
    if (bundle != null) {
     Object[] pdus = (Object[]) intent.getExtras().get("pdus");
     for (Object pdu : pdus) {
      SmsMessage message = SmsMessage
        .createFromPdu((byte[]) pdu);
      // 獲取短信的正文內(nèi)容
      content = message.getMessageBody().trim();
      // 獲取短信的發(fā)送者
      address = message.getOriginatingAddress();
     }
     Log.v(TAG+"BroadcastReceiver address", "手機號=="
       + address);
     if (address != null && address.equals("10658464")) {
      String regex = "\\d*";
      Pattern p = Pattern.compile(regex);
      Matcher m = p.matcher(content);
      while (m.find()) {
       if (m.group().length() == 6) {
        msgCode = m.group();
       }
      }
      Log.v(TAG+" BroadcastReceiver msgCode",
        "驗證碼==" + msgCode);
      metVerify.setText(msgCode);
     }
    }
   }
  }

 }; 

在activity 中的oncreate方法中,需要注冊這個廣播:

 filter = new IntentFilter("android.provider.Telephony.SMS_RECEIVED"); 
  getApplicationContext().registerReceiver(getMessageReceive, filter);

這樣,在接收到短信后,會發(fā)送廣播,然后進行截取,但這個方法在android4.4后,部分手機就無法正常截取,因此推薦使用第二個方法。

  第二個方法實現(xiàn)如下:

/**
     * 監(jiān)聽短信數(shù)據(jù)庫
     */
    class SmsContent extends ContentObserver {

        private Cursor cursor = null;

        public SmsContent(Handler handler) {
            super(handler);
        }

        @Override
        public void onChange(boolean selfChange) {

            super.onChange(selfChange);
            //讀取收件箱中指定號碼的短信
            cursor = managedQuery(Uri.parse("content://sms/inbox"), new String[]{"_id", "address", "read", "body"},
                    " address=? and read=?", new String[]{"10658464", "0"}, "_id desc");//按id排序,如果按date排序的話,修改手機時間后,讀取的短信就不準了
            if (cursor != null && cursor.getCount() > 0) {
                ContentValues values = new ContentValues();
                values.put("read", "1");        //修改短信為已讀模式
                cursor.moveToNext();
                int smsbodyColumn = cursor.getColumnIndex("body");
                String smsBody = cursor.getString(smsbodyColumn);
                ed_mmscode.setText(getDynamicPassword(smsBody));

            }

            //在用managedQuery的時候,不能主動調(diào)用close()方法, 否則在Android 4.0+的系統(tǒng)上, 會發(fā)生崩潰
            if(Build.VERSION.SDK_INT < 14) {
                cursor.close();
            }
        }
    }

種用內(nèi)容觀查者,在接收到短信后,發(fā)生變化時,觸發(fā)onChange 方法。這種方法在測試的手機上均可攔截,故推薦大家使用這種方法,附demo 下載 :https://github.com/maliankun/intercept/archive/master.zip

文章標題:android截取驗證碼的兩種實現(xiàn)方式
文章位置:http://sd-ha.com/article34/jiipse.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站內(nèi)鏈、做網(wǎng)站、企業(yè)網(wǎng)站制作、虛擬主機、網(wǎng)站導(dǎo)航、定制開發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

綿陽服務(wù)器托管