对系统数据库表变化的监听
1.注册监听
this.getContentResolver().registerContentObserver(CallLog.CONTENT_URI,true, myContentObserver);
?
2.
/** * 用来实现对通话记录表变化的监听 监听到变化的时候发送Message * * */private ContentObserver myContentObserver = new ContentObserver(new Handler() {}) {@Overridepublic void onChange(boolean selfChange) {super.onChange(selfChange);System.out.println("---------------监听到表变化!");Message ms = new Message();handler.dispatchMessage(ms);//发送消息给Handler}};?
?3.
private final Handler handler = new Handler() {@Overridepublic void handleMessage(Message msg) {//处理消息// if (willDo != null)// {// System.out.println("removeCallbacks一次!");// this.removeCallbacks(willDo);//从队列中移除//// }// this.postDelayed(willDo, 2000);//怎么理解???????2秒内如果接受到新的消息System.out.println("外面一次!");if (willDo != null && flag == true) {this.post(willDo);System.out.println("里面一次!");flag = false;Timer timer = new Timer();// 设置一个定时器,如果3秒后再将flag设置为true,才能继续监听改变timer.schedule(new TimerTask() {@Overridepublic void run() {flag = true;}}, 3000);}}};?4.
private Runnable willDo = new Runnable() {public void run() {initCallLogs();//对表变化所执行的一些操作System.out.println("WillDo执行一次!");}};??