700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > android短信验证码自动填写

android短信验证码自动填写

时间:2023-07-05 11:39:41

相关推荐

android短信验证码自动填写

首先学习一下观察者模式:

观察者模式是软件设计模式中的一种,在此种模式下,一个目标物件管理所有相依于它的观察者物件,并且在他本身的状态改变时主动发出通知。这通常透过呼叫各观察者所提供的方法

来实现。此种模式通常被用来实现事件处理系统。

观察者模式(Observer)完美的将观察者和被观察者的对象分离开,在模块之间划定了清晰的界限,提高了应用程序的可维护性和重用性。

观察者设计模式定义了对象间的一种一对多的依赖关系,以便一个对象的状态发生变化时,所有依赖于它的对象都得到通知并自动刷新。

ContentObserver

内容观察者,目的是观察(捕捉)特定Uri引起的数据库的变化,继而做一些相应的处理,它类似于数据库技术中的触发器,当ContentObserver所观察的Uri发生变化时,便会触发它。

观察特定Uri的步骤如下:

1.创建我们特定的ContentObserver派生类,必须重载父类构造方法,必须重载onChange()方法去处理回调后的功能实现。

2.利用context.getContentResolover()获得ContentResolover对象,接着调用registerContentObserver()方法去注册内容观察者。

3.由于ContentObserver的生命周期不同步于Acitivity和Service等,因此,在 不需要时,需要手动的调用unregisterContentObserver()去取消注册。

1.编写SmsContentObserver类

public class SmsObserver extends ContentObserver {private Context mContext;private Handler mHandler;public SmsObserver(Context context ,Handler handler){super(handler);mContext = context;mHandler = handler;}@Overridepublic void onChange(boolean selfChange, Uri uri) {super.onChange(selfChange, uri);Log.e("DEBUG", "sms has changed");Log.e("DEBUG",uri.toString());String code = "";//短信变化发出第一个变化是下面的uri,但这时短信并未写入到数据库中,因此这次变化不能做出回调if ((uri.toString()).equals("content://sms/raw")){return;}Uri inboxUri = Uri.parse("content://sms/inbox");Cursor c = mContext.getContentResolver().query(inboxUri,null,null,null,"date desc");//按日期倒序排列if (c!=null){if (c.moveToFirst()){String address = c.getString(c.getColumnIndex("address"));String body = c.getString(c.getColumnIndex("body"));//判断发件人if (!address.equals("15566668888")){return;}Log.e("DEBUG", "发件人为:" + address + " " + "短信内容:" + body);Pattern pattern = pile("(\\d{6})");//这个正则表达式就是指提取连续6个数字Matcher matcher = pattern.matcher(body);if (matcher.find()){code = matcher.group(0);Log.e("DEBUG","code is "+code);mHandler.obtainMessage(MainActivity.MSG_RECEIVED_CODE,code).sendToTarget();}}c.close();}}}

2.注册observer

//注册observermObserver = new SmsObserver(MainActivity.this,mHandler);Uri uri = Uri.parse("content://sms");//这个uri指代的就是我们的短信getContentResolver().registerContentObserver(uri, true , mObserver);

3.最后使用handler修改UI

private Handler mHandler = new Handler(){@Overridepublic void handleMessage(Message msg) {if (msg.what == MSG_RECEIVED_CODE){String code = (String) msg.obj;//update UImEditText.setText(code);Toast.makeText(MainActivity.this,code,Toast.LENGTH_LONG).show();}}};

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。