最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android利用CursorLoader實(shí)現(xiàn)短信驗(yàn)證碼自動(dòng)填寫

 更新時(shí)間:2016年11月09日 11:02:28   作者:湖廣午王  
這篇文章主要為大家詳細(xì)介紹了Android利用CursorLoader實(shí)現(xiàn)短信驗(yàn)證碼自動(dòng)填寫的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

概述

Android上實(shí)現(xiàn)短信驗(yàn)證碼自動(dòng)填寫,常用的有兩種方式。一種是利用BroadCastReceiver,還有一種是監(jiān)聽手機(jī)上短信數(shù)據(jù)庫的變化。利用BroadCastReceiver來實(shí)現(xiàn)會(huì)在一些情況下無效,最常見的就是手機(jī)上安裝了具有垃圾短信攔截功能的軟件的情況下,短信驗(yàn)證碼自動(dòng)填寫無效。所以,現(xiàn)在一般會(huì)選用監(jiān)聽數(shù)據(jù)庫內(nèi)容變化的方式來實(shí)現(xiàn)短信驗(yàn)證碼自動(dòng)填寫。
網(wǎng)上對(duì)于利用監(jiān)聽數(shù)據(jù)庫內(nèi)容變化來實(shí)現(xiàn)短信驗(yàn)證碼自動(dòng)填寫的文章也很多,主要分為一下步驟:
1. 繼承ContentObserver實(shí)現(xiàn)一個(gè)短信數(shù)據(jù)庫的觀察者,再onChange。
2. 在Activity中注冊(cè)設(shè)個(gè)觀察者。
3. 在AndroidManifast文件中添加相關(guān)權(quán)限。
4. 別忘了再Activity的onDestory方法中取消注冊(cè)的觀察者。
經(jīng)過驗(yàn)證這種方式是可行的,而且比較好用。這種方法讀取短信的Cursor來源與Activity的managedQuery方法,這個(gè)方法已經(jīng)被標(biāo)記為廢棄,推薦用CursorLoader來代替。

CursorLoader的好處

首先,CursorLoader繼承的是AsyncTaskLoader,采用異步的方式查詢數(shù)據(jù)庫,避免了同步查詢阻塞UI線程的問題。它自己會(huì)監(jiān)視數(shù)據(jù)源的變化并且會(huì)主動(dòng)上報(bào)。而且,當(dāng)發(fā)生配置上的變化,重新生成的loader會(huì)自動(dòng)連接到變化前的cursor,在不使用查詢到的資源時(shí),可以自動(dòng)將其釋放。

短信驗(yàn)證碼自動(dòng)填寫的實(shí)現(xiàn)類

一言不合就直接貼代碼了:

package com.wuwang.demo;

import android.content.ContentValues;
import android.content.Context;
import android.database.ContentObserver;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.support.v4.app.LoaderManager;
import android.support.v4.content.CursorLoader;
import android.support.v4.content.Loader;
import android.util.Log;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * <p>Author : Wuwang </p>
 * <p>Company : ZhiJiaKeJi</p>
 * <p>Date :2016-07-21 09:16</p>
 * <p>Description : 驗(yàn)證碼自動(dòng)填充</p>
 */
public class VerificationCodeAutoFill implements LoaderManager.LoaderCallbacks<Cursor> {

  private Context context;
  private OnNewMessageListener listener;
  private String msgRegular;

  public VerificationCodeAutoFill(Context context){
    this(context,null,null);
  }

  public VerificationCodeAutoFill(Context context,OnNewMessageListener listener){
    this(context,listener,null);
  }

  /**
   * @param context
   * @param listener 新短信監(jiān)聽
   * @param msgRegular 對(duì)新短信處理的正則表達(dá)式,如果為空,則不進(jìn)行處理
   */
  public VerificationCodeAutoFill(Context context, OnNewMessageListener listener,String msgRegular){
    this.context=context;
    this.listener=listener;
    this.msgRegular=msgRegular;
  }

  public VerificationCodeAutoFill registerTo(int id,LoaderManager manager){
    manager.initLoader(id,null,this);
    return this;
  }

  @Override
  public Loader<Cursor> onCreateLoader(int id, Bundle args) {
    return new CursorLoader(context,Uri.parse("content://sms/inbox"),
        new String[] { "_id", "address", "read", "body" },
        " read=?",
        new String[] {"0" }, "_id desc");
  }

  @Override
  public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
    // 按id排序,如果按date排序的話,修改手機(jī)時(shí)間后,讀取的短信就不準(zhǔn)了
    if (data != null && data.getCount() > 0) {
      ContentValues values = new ContentValues();
      values.put("read", "1"); // 修改短信為已讀模式
      data.moveToNext();
      int smsbodyColumn = data.getColumnIndex("body");
      String smsBody = data.getString(smsbodyColumn);
      Log.e("wuwang",smsBody);
      if(listener!=null){
        listener.onNewMessage(getDynamicPassword(smsBody,msgRegular));
      }
    }
  }

  @Override
  public void onLoaderReset(Loader<Cursor> loader) {

  }

  public interface OnNewMessageListener {
    void onNewMessage(String msg);
  }

  private String getDynamicPassword(String str,String regular) {
    if(regular==null)return str;
    Pattern continuousNumberPattern = Pattern.compile(msgRegular);
    Matcher m = continuousNumberPattern.matcher(str);
    String dynamicPassword = "";
    while (m.find()) {
      System.out.print(m.group());
      dynamicPassword = m.group();
    }
    return dynamicPassword;
  }

}

使用方法

使用比較簡(jiǎn)單,直接再FragmengActivity中加上:

//匹配四位數(shù)字的短信驗(yàn)證碼
new VerificationCodeAutoFill(this, new VerificationCodeAutoFill.OnNewMessageListener() {
      @Override
      public void onNewMessage(String msg) {
        //etMsg.setText(msg); //驗(yàn)證碼填充
      }
    }, "\\d{4}").registerTo(1,getSupportLoaderManager());

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Android源碼使用16進(jìn)制進(jìn)行狀態(tài)管理的方法

    Android源碼使用16進(jìn)制進(jìn)行狀態(tài)管理的方法

    這篇文章主要介紹了Android源碼使用16進(jìn)制進(jìn)行狀態(tài)管理的方法,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-07-07
  • Android串口開發(fā)之使用JNI實(shí)現(xiàn)ANDROID和串口通信詳解

    Android串口開發(fā)之使用JNI實(shí)現(xiàn)ANDROID和串口通信詳解

    這篇文章主要給大家介紹了關(guān)于Android串口開發(fā)之使用JNI實(shí)現(xiàn)ANDROID和串口通信的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2018-01-01
  • Android 中三種啟用線程的方法總結(jié)

    Android 中三種啟用線程的方法總結(jié)

    下面小編就為大家?guī)硪黄狝ndroid 中三種啟用線程的方法總結(jié)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-02-02
  • Android幾種多渠道打包的步驟詳解

    Android幾種多渠道打包的步驟詳解

    在不同的應(yīng)用市場(chǎng)可能有不同的統(tǒng)計(jì)需求,需要為每個(gè)應(yīng)用市場(chǎng)發(fā)布一個(gè)安裝包,這里就引出了Android的多渠道打包。這篇文章主要介紹了Android幾種多渠道打包,需要的朋友可以參考下
    2019-09-09
  • Android SharedPreferences實(shí)現(xiàn)數(shù)據(jù)存儲(chǔ)功能

    Android SharedPreferences實(shí)現(xiàn)數(shù)據(jù)存儲(chǔ)功能

    這篇文章主要為大家詳細(xì)介紹了Android SharedPreferences實(shí)現(xiàn)數(shù)據(jù)存儲(chǔ)功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • 在android中實(shí)現(xiàn)類似uc和墨跡天氣的左右拖動(dòng)效果

    在android中實(shí)現(xiàn)類似uc和墨跡天氣的左右拖動(dòng)效果

    本文主要介紹下怎樣在android實(shí)現(xiàn)uc和墨跡天氣那樣的左右拖動(dòng)效果,具體代碼如下,感興趣的朋友可以參考下哈
    2013-06-06
  • 基于Android ListView之加載使用技巧

    基于Android ListView之加載使用技巧

    本篇文章小編為大家介紹,基于Android ListView之加載使用技巧。需要的朋友參考下
    2013-04-04
  • Android之scrollview滑動(dòng)使標(biāo)題欄漸變背景色的實(shí)例代碼

    Android之scrollview滑動(dòng)使標(biāo)題欄漸變背景色的實(shí)例代碼

    這篇文章主要介紹了Android之scrollview滑動(dòng)使標(biāo)題欄漸變背景色的實(shí)例代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-05-05
  • Android AS為xutils添加依賴過程圖解

    Android AS為xutils添加依賴過程圖解

    這篇文章主要介紹了Android AS為xutils添加依賴過程圖解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-11-11
  • Android原生繪圖工具Canvas詳細(xì)

    Android原生繪圖工具Canvas詳細(xì)

    上一篇文章給大家介紹了Android原生繪圖工具Paint,然而android中提供了類似的工具Canvas和Paint,分別對(duì)應(yīng)畫布和畫筆,所以今天的這篇文章就來介紹Androi原生繪圖的另一個(gè)工具Canvas,感興趣的小伙伴一起來學(xué)習(xí)下面文章內(nèi)容
    2021-09-09

最新評(píng)論

山丹县| 耿马| 邹平县| 沈阳市| 江源县| 福泉市| 文成县| 辽阳市| 乡城县| 满洲里市| 错那县| 东平县| 政和县| 湄潭县| 平遥县| 邻水| 靖宇县| 大悟县| 宜兰市| 新源县| 黎川县| 靖西县| 禄丰县| 长阳| 平阳县| 利津县| 巨野县| 余庆县| 崇阳县| 四平市| 社会| 大埔县| 呼伦贝尔市| 丽水市| 洛浦县| 绵竹市| 定兴县| 旬阳县| 绩溪县| 汉中市| 镶黄旗|