原创
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。
现在很多app已经有了自动截取短信验证码的功能,更好的可以给用户好的体验感,以下我们就进行一点下短信的自动截取。
首先应该进行一下几点:
1、首先创建一个类继承自ContentObserver,类实现onChange()的方法。(onchange方法是在观察的Uri发生改变时触发)
2、在activity中注册一个内容观察者
3、在onDestroy方法中进行注销内容观察者
一、下面是继承自ContentObserver中的代码
package com.example.smscode;
import android.content.Context;
import android.database.ContentObserver;
import android.database.Cursor;
import android.net.Uri;
import android.os.Handler;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
* Created by wangchaoon 17/1/21.
public class SmsContentObserver extends ContentObserver {
private final Handler handler;
private final Context context;
//传一个context,和handler与activity进行交互
public SmsContentObserver(Handler handler, Context context) {
super(handler);
this.context = context;
this.handler = handler;
}
* 当想要观察的对应的uri发生改变的时候,触发
* @param selfChange
@Override
public void onChange(boolean selfChange) {
super.onChange(selfChange);
//查询出最新的短信
Uri smsUri = Uri.parse("content://sms/inbox");
//查询数据库
Cursor cursor = context.getContentResolver().query(smsUri, null, null, null, "date desc");
StringBuilder stringBuilder = new StringBuilder();
if (cursor.moveToNext()) {
// String address = cursor.getString(cursor.getColumnIndex("address"));
String body = cursor.getString(cursor.getColumnIndex("body"));
stringBuilder.append(body);
}
Pattern pattern = Pattern.compile("(\\d{6})");//正则表达式,来截取连续的6位数字
Matcher matcher = pattern.matcher(stringBuilder.toString());
if (matcher.find()) {
String code = matcher.group(0);
//将截取下来的数字通过handler发送给activity
handler.obtainMessage(0, code).sendToTarget();
}
}
}
二、Activity中进行注册和接受handler发送的消息
package com.example.smscode;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
String message = (String) msg.obj;
tv.setText(message);
}
};
private TextView tv;
private SmsContentObserver smsContentObserver;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv = (TextView) findViewById(R.id.tv);
//观察短信
Uri uri = Uri.parse("content://sms");
smsContentObserver = new SmsContentObserver(handler, this);
//注册一个内容观察者
getContentResolver().registerContentObserver(uri, true,smsContentObserver );
}
@Override
protected void onDestroy() {
super.onDestroy();
getContentResolver().unregisterContentObserver(smsContentObserver);
}
}
通过以上的代码就可以简单的实现短信验证码的自动截取,理解了核心就可以把这段代码用到自己的项目需求中了。
在公司项目的开发过程中,需要编写shell脚本去处理一个业务,在编写过程中发现自身对shell脚本的知识不够完善,顾整理一下,本文章主要内容来自菜鸟教程 , 也添加了一些知识点shell脚本?在说什么...博文来自: web洋仔
From:https://baijiahao.baidu.com/s?id=1586819398136845808&wfr=spider&for=pc国外14个网站国内2个网站:htt...博文来自: freeking101的博客
一般用户喜欢用手机号作为用户名注册APP账号,这时一般都是通过手机验证码的方式进行验证,下面我们就研究一个非常实用的方法,通过监听短信-实现短信验证码的自动填入,提高用户体验。 首先我们看一下如何监听...博文来自: 张亚运的专栏
一个小功能实现短线验证码验自动填写功能。拿到这个功能时,首先需要怎么去拦截获取手机短信。就用观察着来观察系统里的短消息的数据库的变化,“表“内容观察者,只要数据库发生变化,都会出发该ContentOb...博文来自: qq_22637283的博客
实现自动读取短信验证码功能使用观察者模式监听短信的变化/***监听短信数据库变化*@authorJeff*@describe*@date2018/5/24.*/publicclassSmsDataba...博文 会飞的鱼的博客
几百个项目获取验证码工具,比如微信QQ支付宝等等,只要用到短信获取验证码的都可以用这个工具,很强大,极其强大 相关下载链接://download.csdn.net/download/wz5hzf78/论坛
某网站是通过JS文件来生成验证码的,JS文件里的函数生成随机数,然后发送到服务端,同时将随机数作为参数发送到客户端页面,客户端再通过这个参数提交到服务端,服务端再返回验证码图片。问题是我在程序里面如何论坛
from selenium import webdriverfrom PIL import Imagebroswer = webdriver.Chrome()broswer.maximize_wind...博文来自: rookie_is_me的博客
好吧,标题党了~前言:android应用的自动化测试必然会涉及到注册登录功能,而许多的注册登录或修改密码功能常常需要输入短信验证码,因此有必要能够自动获得下发的短信验证码。主要就是实时获取短信信息。a...博文来自: hunterno4的专栏
向百度大大下手吧。。。大致思路1.打开chrome2.进入百度3.点击登录4.切换账号密码登录5.尝试获取验证码截图(密码输错三次就可以出现验证码了)GKDfrom selenium import w...博文来自: dh0805dh的博客
一般在用户登陆时,都会选择手机号登录,这就难免要获取手机验证码,在前端页面设置获取验证码button,点击后实现倒计时60s,并发送验证码设计结构:后台随机6位验证码将验证码存入session中,调...博文来自: d13601246473的博客
2019年9月2日,我统计了某招聘网站,获得有效程序员招聘数据9万条。针对招聘信息,提取编程语言关键字,并统计如下:编程语言比例排名编程语言百分比1java33.71%2cpp15.95%3c_sha...博文来自: juwikuang的专栏
//就直接上代码了吧public class ScreenTest extends Activity { class SmsContent extends Content...博文来自: Listening_music的专栏
之前在做黑名单屏蔽短信的时候,遇到一个比较棘手的问题,就是我截取我指定号码的短信之后,但是我如何不让系统通过通知栏通知用户,在网上也寻找了很久,也有点眉目了,以下是别人使用 ContentObserv...博文来自: Android爱好者之家
因为项目要求,需要在安卓系统上实现短信截获的功能,用java实现的话网上一大堆,但不喜欢java语言的风格,并且我主方向是c#,于是就用c#完成,网上找到了mono for Android,经过很多的...博文来自: 绝对只有原创
最近做的项目里要监听手机的短消息内容,这个东西好像在最初学的时候都做过,不过现在早忘记了,现在写下来,记住了。前提--权限:方式一:通过广播监听短信消息(注意:这种方式只对新收到的短消息有效,运行代码...博文来自: 其实并不难,是你太悲观
Java 代码 public class ScreenTest extends Activity { class SmsContent extends ContentObserver{ priv...博文来自: gx19862005的专栏
docker学习笔记常用的镜像:docker pull anibali/pytorch:cuda-10.0删除none的镜像:#!/bin/bashdocker ps -a | grep "Exite...博文来自: pan_jinquan的博客
原文地址:http://blog.csdn.net/pengkv/article/details/49077863步骤一:自定义监听类/** * Created by pengkv on 15/1...博文来自: Summer Breeze 夏日微风
其中图片识别所需jar包为:&lt;!--图片识别--&gt;&lt;dependency&gt;&lt;groupId&...博文来自: windy2014s的博客
这是收集的10个最棘手的Java面试问题列表。这些问题主要来自 Java 核心部分 ,不涉及 Java EE 相关问题。你可能知道这些棘手的 Java 问题的答案,或者觉得这些不足以挑战你的 Java...博文来自: 华为云官方博客
模拟登陆时,经常会遇到有验证码的问题,那么就需要把验证码给截取下来。如下为截取验证码程序,该程序的原始地址为:http://www.cnblogs.com/donaldlee2008/p/530450...博文来自: qy20115549的博客