在一些应用上,比如手机银行,QQ,微信等,很多时候我们都需要通过发送验证码到手机上,然后把验证码填上去,然后才能成功地继续去做下面一步事情。
而如果每次我们都要离开当前界面,然后去查收短信,记住验证码,然后再回来输入到控件中,这感觉就会很麻烦,用户体验就会很差,而像微信等一些应用,则会在手机接到短信后,将信息中的验证码给抽出来,帮我们将其填到对应的控件中,多方便,对吧。
这个功能就是通过ContentObserver来实现的。顾名思义,Content Observer,就是内容监听,它实现的功能就是对特定的Uri进行监听,当监听的Uri发生变化时,就能够根据开发者的意思去做相应的处理。
下面我们就利用一个小小的Demo来简单地看一下,Content Observer是如何应用的。
这个小Demo的功能就是会监听短信的到达,然后将短消息里面的内容放到一个TextView上面展示,具体效果如下面的GIF图片:
具体的步骤如下:
1)自定义一个类,它要继承ContentObserver类,并且实现其onChange方法:
public class SMSContentObserver extends ContentObserver{
private static final String TAG = "com.lms.codemo.SMSContentObserver";
private Handler mHandler;
private Context mContext;
private ContentResolver mContentResolver;
private Uri uri = Uri.parse("content://sms/inbox");
private int mMsgCode;
public SMSContentObserver(Handler handler) {
super(handler);
this.mHandler = handler;
}
public SMSContentObserver(Handler handler, Context context, int msgCode){
super(handler);
this.mHandler = handler;
this.mContext = context;
this.mMsgCode = msgCode;
mContentResolver = mContext.getContentResolver();
}
public void onChange(boolean selfChange) {