Android 短信验证码自动填写
Android短信验证码自动填写
1.自定义Observer监听短信数据库变化(注意添加短信权限)
importandroid.app.Activity;
importandroid.content.ContentResolver;
importandroid.database.ContentObserver;
importandroid.database.Cursor;
importandroid.net.Uri;
importandroid.os.Handler;
importandroid.text.TextUtils;
importjava.util.regex.Matcher;
importjava.util.regex.Pattern;
/**
*Createdby001on17/3/22.
*/
publicclassSmsObserverextendsContentObserver{
publicstaticfinalStringSMS_URI_INBOX="content://sms/inbox";
privateActivityactivity=null;
privateStringsmsContent="";
privateSmsListenerlistener;
publicSmsObserver(Activityactivity,Handlerhandler,SmsListenerlistener){
super(handler);
this.activity=activity;
this.listener=listener;
}
@Override
publicvoidonChange(booleanselfChange){
super.onChange(selfChange);
Cursorcursor=null;
//读取收件箱中含有某关键词的短信
ContentResolvercontentResolver=activity.getContentResolver();
cursor=contentResolver.query(Uri.parse(SMS_URI_INBOX),newString[]{
"_id","address","body","read"},"bodylike?andread=?",
newString[]{"%关键词%","0"},"datedesc");
if(cursor!=null){
cursor.moveToFirst();
if(cursor.moveToFirst()){
Stringsmsbody=cursor
.getString(cursor.getColumnIndex("body"));
StringregEx="[^0-9]";
Patternp=Pattern.compile(regEx);
Matcherm=p.matcher(smsbody.toString());
smsContent=m.replaceAll("").trim().toString();
if(!TextUtils.isEmpty(smsContent)){
listener.onResult(smsContent);
}
}
}
}
/*
*短信回调接口
*/
publicinterfaceSmsListener{
/**
*接受sms状态
*
*@Title:onResult
*/
voidonResult(StringsmsContent);
}
}
2.使用:
SmsObserversmsObserver=newSmsObserver(this,newHandler(),newSmsObserver.SmsListener(){
@Override
publicvoidonResult(StringsmsContent){
//根据需求写
//如:editText.setText(smsContent);
}});this.getContentResolver().registerContentObserver(Uri.parse("content://sms/"),true,smsObserver);
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!