关于 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;
        }
    }

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

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值