用到ContentObserver的观察者模式
1、创建短信观察者
public class SmsObserver extends ContentObserver {
private Context mContext;
private Handler mHandler;
private String code = "";
public SmsObserver(Context context, Handler handler) {
super(handler);
this.mContext = context;
mHandler = handler;
}
/**
* 需要观察的被观察对象发生变化的时候会自动调用的函数
*
* @param selfChange 本身是否发生变化
* @param uri 相应的Uri
*/
@Override
public void onChange(boolean selfChange, Uri uri) {
super.onChange(selfChange, uri);
//第一遍执行时短信还未写到数据库中,所以忽略第一遍
if (uri.toString().equals("content://sms/raw")) {
return;
}
//读取短信
//收件箱的uri
Uri inboxUri = Uri.parse("content://sms/inbox");
//游标查询数据库 date desc按日期倒叙排列
Cursor cursor = mContext.getContentResolver().query(inboxUri, null, null, null, "date desc");
if (cursor != null) {
if (cursor.moveToFirst()) {//将游标移动到第一条(判断数据库里是否有数据)
String address = cursor.getString(cursor.getColumnIndex("address"));//收件人
String body = cursor.getString(cursor.getColumnIndex("body"));//具体内容
//使用正则表达式对验证码进行提取
Pattern pattern = Pattern.compile("(\\d{5})");//提取短信中连续6个数字的内容
Matcher matcher = pattern.matcher(body);
if (matcher.find()) {//匹配
code = matcher.group(0);
mHandler.obtainMessage(ContactStateActivity.MESSAGE_CODE, code).sendToTarget();
}
}
cursor.close();
}
}
}
2、注册
smsObserver = new SmsObserver(this, handler);
//当短信的收件、发件发生变化时都会反映到这个uri上
Uri uri = Uri.parse("content://sms");
//注册
getContentResolver().registerContentObserver(uri, true, smsObserver);
3、解注册
@Override
protected void onPause() {
super.onPause();
getContentResolver().unregisterContentObserver(smsObserver);
}
4、获得值更新UI
@SuppressLint("HandlerLeak")
private Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
if(msg.what==MESSAGE_CODE){
String code = (String) msg.obj;
etCodeNum.setText(code);
}
}
};
5、记得申请短信读取权限(6.0以上要动态活获取)
<uses-permission android:name="android.permission.READ_SMS"/>
目前华为等手机有对短信验证码的保护,防止第三方窃取等,可以先在短信设置里面关掉再试试。
本站以现代、古代情诗为主,情诗网创办于2013年,以原创爱情诗歌、经典情诗、现代情诗、古代情诗、英文情诗、情诗绝句为主并收集古诗、古诗词、诗歌大全、诗词名句的文学门户。方便您下次继续阅读;可以放在浏览器的收藏夹中(快捷键Ctrl+D);或者看到喜欢或者有趣的诗词可以通过分享按钮给你的好友分享;情诗网是目前最全情诗大全网站之一。并欢迎广大诗歌爱好者阅览投稿!喜欢本站的话请大家把本站告诉给你朋友哦!地址是 www.qingshiwang.com !