自动填写验证码(内容提供者)

来源:互联网 发布:淘宝开店认证需要什么 编辑:程序博客网 时间:2024/05/16 08:52

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;}@Overridepublic 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手机号码.小米手机已通过测试.


自动获取短信验证码,两种方式,

内容提供者:获取短信数据库,查询指定号码.(就是以上代码)

广播接收者, 广播接收者,接收收到短信广播,取出当前短信内容, 容易被其他三方软件和系统自带软件提前拦截到.

有的软件是在开机就启动服务,进行拦截.  谁先接收到 可以取消广播,自己的软件就接收不到了.

0 0
原创粉丝点击