![这里写图片描述]()
小编这里有个自己的学习交流群681+503+716(验证编号:大鲨)
* 1.自定义监听类*
/**
* 短信**,用于自动填充验证码
*/
public class SMSContentObserver extends ContentObserver {
public final String SMS_URI_INBOX = "content://sms/inbox";
private Activity activity = null;
private String smsContent = "";
private EditText verifyText = null;
private String SMS_ADDRESS_PRNUMBER = "10690329013589";
private String smsID = "";
public SMSContentObserver(Activity activity, Handler handler, EditText verifyText) {
super(handler);
this.activity = activity;
this.verifyText = verifyText;
}
@Override
public void onChange(boolean selfChange) {
super.onChange(selfChange);
Cursor cursor = null;
cursor = activity.getContentResolver().query(Uri.parse(SMS_URI_INBOX),
new String[]{"_id", "address", "body", "read"},
"address=? and read=?",
new String[]{SMS_ADDRESS_PRNUMBER, "0"},
"date desc");
if (cursor != null) {
cursor.moveToFirst();
if (cursor.moveToFirst()) {
if (!smsID.equals(cursor.getString(cursor.getColumnIndex("_id")))) {
String smsbody = cursor.getString(cursor.getColumnIndex("body"));
Pattern pattern = Pattern.compile("[0-9]{6}");
Matcher matcher = pattern.matcher(smsbody);
if (matcher.find()) {
smsContent = matcher.group();
if (verifyText != null && null != smsContent && !"".equals(smsContent)) {
verifyText.requestFocus();
verifyText.setText(smsContent);
verifyText.setSelection(smsContent.length());
}
}
smsID = cursor.getString(cursor.getColumnIndex("_id"));
}
}
}
}
}
2.在登录页面事件化监听类
Java代码
SMSContentObserver mObserver = new SMSContentObserver(getActivity(), new Handler(), mEt_auth_code);
mContext.getContentResolver().registerContentObserver(Uri.parse("content://sms/"), true, mObserver);
> 3.声明读取短信权限
<uses-permission android:name="android.permission.RECEIVE_SMS" />
<uses-permission android:name="android.permission.READ_SMS" />
<uses-permission android:name="android.permission.WRITE_SMS" />
4.为了防止内存泄漏,记得注销监听
Java代码
@Override
public void onDestroy() {
super.onDestroy();
mContext.getContentResolver().unregisterContentObserver(mObserver);
}
小结:
去短信库获取短信比较不容易被拦截