1. 程式人生 > >Android ContentObserver實現驗證碼自動填入

Android ContentObserver實現驗證碼自動填入

在這裡跟大家分享下Android的內容監聽者 ContentObserver 內容監聽者是監聽一個指定路徑裡面的資料,當發生改變的時候會呼叫onChange方法,在這裡跟大家實現一個驗證碼的自動填寫。

佈局程式碼就一個TextView用來顯示驗證碼。

MainActivity中程式碼如下:

  private TextView textView;
    private Handler handler;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //要賦值的TextView
        textView = (TextView) findViewById(R.id.tv_main_number);
        //例項化一個handler
        handler = new Handler(){
            //接受訊息的方法
            @Override
            public void handleMessage(Message msg) {
                super.handleMessage(msg);
                //通過Message 獲取bundle  bundle是一個放資料的
                Bundle bundle=msg.getData();
                //重bundle中拿出放入相對應key的value
                textView.setText(bundle.getString("number"));

            }
        };
        //開始監聽內容 sms為所有簡訊包括髮簡訊箱,收簡訊箱,草稿箱...
        this.getContentResolver().registerContentObserver(Uri.parse("content://sms"),true,new MyObserver(handler));
    }
//自己用內部類實現CotentObserver 需要重寫構造方法
    class MyObserver extends ContentObserver{

        public MyObserver(Handler handler) {
            super(handler);

        }
    //當監聽的sms中發生了改變的時候會呼叫該方法,比如來簡訊了。
        @Override
        public void onChange(boolean selfChange) {
            //查詢收信箱中所有的訊息按時間排序
            Cursor cursor=MainActivity.this.getContentResolver().query(Uri.parse("content://sms/inbox"),null,null,null,"date desc");
            //判斷遊標是否為空
            if(cursor!=null) {
                //如果遊標有值,這時的遊標查詢出來的資料是最新來的簡訊
               if (cursor.moveToNext()) {
                   //如果收到的簡訊號碼為*******並且內容包含了驗證碼三個字那麼就是想要的
                   if (cursor.getString(cursor.getColumnIndex("address")).equals("+86***********") && cursor.getString(cursor.getColumnIndex("body")).contains("驗證碼")) {
                    //獲取剛才的簡訊內容
                       String date = cursor.getString(cursor.getColumnIndex("body"));
                       //獲取:的開始座標
                       int star = date.indexOf(":");
                       //在:的座標基礎上+1擷取後面四位數
                       String data = date.substring(star + 1, star + 5);
                       //例項化訊息
                       Message ms = new Message();
                       //例項化箱子
                       Bundle bundle = new Bundle();
                       //放入驗證碼到箱子裡
                       bundle.putString("number", data);
                       //把箱子放入訊息中
                       ms.setData(bundle);
                       //傳送訊息,通過handler去更新
                       handler.sendMessage(ms);
                   }
               }

           }
        }
    }

所有解釋都在程式碼註釋上,注意要增加簡訊的許可權。

今天的分享都在這裡了,根據需求可更改判斷的條件和判斷簡訊的內容。

相關推薦

Android ContentObserver實現驗證自動

在這裡跟大家分享下Android的內容監聽者 ContentObserver 內容監聽者是監聽一個指定路徑裡面的資料,當發生改變的時候會呼叫onChange方法,在這裡跟大家實現一個驗證碼的自動填寫。 佈局程式碼就一個TextView用來顯示驗證碼。 MainActiv

利用百度OCR實現驗證自動識別

/** * 獲取識別驗證碼 * @param imageUrl * @return */ public static String OCRVCode(String imageUrl){ String VCode = "";

android 簡訊驗證自動填寫的二種方法

現在開發越來越注重使用者體驗了,現今Android基本都有簡訊驗證功能,那今天就實現一個自動填寫簡訊驗證碼的小Demo,其中涉及有觀察者模式、以及使用Handler來實現UI的更新。 我們還是先了解一

Java Swing 圖形界面實現驗證驗證可動態刷新)

string ble urn repaint xtend efault event adapt 內容 import java.awt.Color;import java.awt.Font;import java.awt.Graphics;import java.awt.To

Java實現驗證(上)

ins check dom 後臺 類繼承 訪問 and text 出錯   眾所周知,現在登錄註冊各種網站賬號很多都要求輸入驗證碼。設置驗證碼,毫無疑問降低了用戶體驗,但為什麽各種網站還仍然使用驗證碼呢?   很明顯,驗證碼有其特殊的作用:驗證碼是一種區分用戶是計算機還是人

PHP實現驗證制作

php 驗證碼 captcha.php(PHP產生驗證碼並儲存Session):<?php //開啟Session session_start(); //繪制底圖 $image = imagecreatetruecolor(100, 30);//返回資源型的值 $bgcolor =

GitLab 實現自動部署(轉載自https://segmentfault.com/a/1190000011561808)

use name 無密碼登錄 row 內容 app mage 請求 XML 在當下使用 GIT 來管理代碼已經是一種非常流行的方式了。使用 GIT 可以很方便的給代碼創建分支,撤銷不需要的提交,與他人合作共同編寫代碼。 GitLab 是基於

關於豆瓣登錄,並實現驗證輸入的方法

保持 學習 gen index token 如果 抓取 with open comment 最近想把模擬登錄的知識學習下,所以就進行了豆瓣賬號的簡單登錄,以下是代碼: # -*- coding:utf-8 -*- ‘‘‘豆瓣模擬登陸,並實現發一條狀態‘‘‘ impor

Python使用Timer實現驗證功能

input thread sel def AC check cache IT imp from threading import Timer import random class Code: def __init__(self): s

PHP實現驗證

channels echo img -type order pos 函數返回 個數 body (1)常見的驗證碼哪些? 圖像類型、語音類型、視頻類型、短信類型等 (2)使用驗證碼的好處在哪裏? ①防止惡意的破解密碼如一些黑客為了獲取到用戶信息,通過不同的手段向服務器

Spring中整合Cage,實現驗證功能

ger 類型 body match exce sub pom esp rec 1.pom.xml中添加Cage依賴。 <dependency> <groupId>com.github.cage</groupId

shop--6.店鋪註冊--使用kaptcha實現驗證

ssa p s request ava edi eth ring formdata input 1.引入jar包 https://mvnrepository.com/中搜索com.github.penggle 找到kaptcha,將其dependency拷貝到pom.xml

Python爬蟲實例 動態ip+抓包+驗證自動識別

PE IT agent 也有 pass ttr timeout edi targe   最近出於某種不可描述的原因,需要爬一段數據,大概長這樣:      是一個價格走勢圖,鼠標移到上面會顯示某個時刻的價格,需要爬下來日期和價格。   第一步肯定先看源代碼,找到了這

gitlab+jenkins+tomcat實現自動部署

要求 再次 返回 完成 conf 主機ip eight word-wrap class 一 搭建docker-gitlab-ce(優先部署docker,前面有docker部署文檔)環境準備:1 物理內存要大於3GB 2 Linux Centos7系統 3 需要能夠訪問外網

PHP JS CSS session實現驗證功能

驗證碼 ges ron oss art tex lse 個數 bcd PHP JS CSS session實現驗證碼功能 頁面<?php//校驗驗證碼if (isset($_POST["authcode"])) {session_start();

網頁登陸註冊(jsp實現)驗證

cte exp .com tran cti version height 一個 dog 這是一個登陸頁面,有登陸驗證和驗證碼的功能(1)生成驗證碼的servlet:import javax.imageio.ImageIO;import javax.servlet.Servl

基於SVM的python簡單實現驗證識別

save def lse highlight pro imp bubuko uac 如果 1. 爬取驗證碼圖片 from urllib import request def download_pics(pic_name): url = ‘http://wsbs

github webhook 實現自動部署 踩坑!!

添加 sudoers lin http 必須 ebs spa 踩坑 bsp 踩坑:   1、php程序執行linux命令是以webserver的user用戶(如apache 、www……)操作的,需要在/etc/sudoers添加用戶免密碼操作權限;   2、以we

SpringMVC實現驗證功能

yui eat cat import inpu expires 否則 void pos 下面是一張項目結構圖,實現功能前需要先搭建好SpringMVC框架。 RandomValidateCode.java——是生成驗證碼的類 Constants.java——定義了一個常量

canvas實現驗證功能

code 區分大小寫 font num type move style lower 輸入 我們在做一些後臺系統登錄功能的時候,一般都會用到驗證碼,最多的就是後臺生成的驗證碼圖片返回給前端的。也可以不調用後端接口,前端使用canvas直接生成驗證碼。 由於功能過於簡單,不需要