您的位置:首页 > 其它

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

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

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

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

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

有的软件是在开机就启动服务,进行拦截. 谁先接收到 可以取消广播,自己的软件就接收不到了.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: