关于 contentObserver()中的onChang()执行两次的问题

计划是写一个监听信息的东西,在网上一查,好多大婶们都说如果监听广播的话很有可能被第三方的信息应用比如飞信或者GO短信把广播截取了,因为急着做出东西,就没采取这条路,有机会试试监听广播的方法,看看是否可行,毕竟自己看到了才确定嘛!鼓励动手,坚持执行力~~

 我采用的是监听数据库变化的方法来监听信息,监听数据库的话就用到了本文的主角了ContentObserver(handler),当然它对我们有用的就是onChange()方法了,但是经过调试,发现每次接收到信息这个onChange()方法都会执行两次,这样对要执行的动作就会有影响,然后网上找了找貌似有很多人碰到这个问题,但都没有解决方法,目前还没找到方法,会继续寻找,哪位有办法可以告诉我一声。

虽然没有从原理上解决这个问题的办法,但我们可以灵活的绕过这个问题最后达到我们要的效果:

上一段代码 大家看看 欢迎拍砖交流

private final ContentObserver simChangeObserver =
       new ContentObserver(new Handler()) {
   @Override
   public void onChange(boolean selfUpdate) {
       super.onChange(selfUpdate);
       startQuery();
     if(!isQuery){
    	 showMessage();
     }else{
    	 //do nothing
     }
   }
};

 private void startQuery() {
        try {
           //mQueryHandler.startQuery(0, null, ICC_URI, null, null, null, null);
        	 mCursor = managedQuery(Uri.parse("content://sms/"), 
        			 null, 
        			 null, 
        			 null,
        			 null); 
        } catch (SQLiteException e) {
            //
        }
        
        j++;
       if(j%2 == 0){
        isQuery = true;
        }
    }

呃 算是比较取巧的办法~~

你可能感兴趣的:(数据库,null,Go)