自动填写验证码(内容提供者)
2014-02-28 16:20
274 查看
package com.example.receiver; import java.util.regex.Matcher; import java.util.regex.Pattern; import android.content.ContentResolver; import android.content.Context; import android.database.ContentObserver; import android.database.Cursor; import android.net.Uri; import android.os.Handler; import android.widget.EditText; /** * @Description: 自动填写校验码 * * 需要权限 <uses-permission * android:name="android.permission.RECEIVE_SMS" /> * <uses-permission android:name="android.permission.READ_SMS" /> */ public class VerifyUtil { /** * * @Description: (用一句话描述该方法做什么) 注册内容提供者 * @param context * @param editText 填写验证码的输入框 * @param number 手机号码 * */ public static void setVerify(Context context, EditText editText, String number) { SmsContent content = new SmsContent(context, new Handler(), editText, number); context.getContentResolver().registerContentObserver( Uri.parse("content://sms/"), true, content); } static class SmsContent extends ContentObserver { // public static final String SMS_URI_INBOX = "content://sms/inbox"; private Context context = null; private String smsContent = ""; private EditText verifyText = null; private String number; public SmsContent(Context context, Handler handler, EditText verifyText, String number) { super(handler); this.context = context; this.verifyText = verifyText; this.number = number; } @Override public void onChange(boolean selfChange) { super.onChange(selfChange); ContentResolver resolver = context.getContentResolver(); Cursor cursor = null;// 光标 // 读取收件箱中指定号码的短信 cursor = resolver.query(Uri.parse("content://sms/"), new String[] { "_id", "address", "body", "read" }, "address=?", new String[] { "+86" + number }, "date desc"); if (cursor.getCount() == 0) { cursor = resolver.query(Uri.parse("content://sms/"), new String[] { "_id", "address", "body", "read" }, "address=?", new String[] { number }, "date desc"); } if (cursor != null) {//这个手机号有短信 //去出短信中所有数字 // int count = cursor.getCount(); // cursor.moveToFirst(); if (cursor.moveToFirst()) { String smsbody = cursor.getString(cursor .getColumnIndex("body")); String regEx = "[^0-9]"; Pattern p = Pattern.compile(regEx); Matcher m = p.matcher(smsbody.toString()); smsContent = m.replaceAll("").trim().toString(); verifyText.setText(smsContent); } } } } }
如果没有成功,打印一下 里面数据库里存的address .这里只判断了 正常手机号码, 和+86手机号码.小米手机已通过测试.
自动获取短信验证码,两种方式,
内容提供者:获取短信数据库,查询指定号码.(就是以上代码)
广播接收者, 广播接收者,接收收到短信广播,取出当前短信内容, 容易被其他三方软件和系统自带软件提前拦截到.
有的软件是在开机就启动服务,进行拦截. 谁先接收到 可以取消广播,自己的软件就接收不到了.
相关文章推荐
- 用ContentObserver内容观察者写了一个自动填写验证码
- 蚂蚁分类信息系统KindEditor编辑器增加远程图片自动上传到本地并加水印自动填写摘要内容
- 快速实现自动填写验证码的功能
- 这是一个用于拦截android实时短信的库,可以进行短信过滤,得到自己想要的内容,可以用于需要自动填写短信验证码的app项目
- Android短信息验证码自动填写详细介绍
- expect 极简示例,用脚本自动填写要输入的内容
- Android实现自动填写获取验证码功能
- 用于验证码图片识别的类(C#源码) 使用进程投票,可自动清除Alert弹出窗口,可自动换IP,ADSL用户自行修改Restart.bat中第三行内容
- Android自动填写获取到的验证码
- HttpWebRequest自动登录网站并获取网站内容(不包含验证码的网站)
- android读取短信内容 自动填充验证码
- [AHK]通达信登录窗口账户密码自动填写(验证码已解决)
- 关于c#的webbrows控件自动填写表单并获取提交后的网页内容
- Android短信息验证码自动填写详细介绍
- 向web网页填写内容 自动登录
- Android开发:使用AutoInputAuthCode快速实现自动填写验证码
- android读取短信内容(自动填充验证码)
- Android 自动填写验证码
- HttpWebRequest自动登录网站并获取网站内容(不包含验证码的网站)
- Android开发:实现APP自动填写注册验证码功能