android对于短信的监听是否与其它的有区别?[短信监听第二贴]

时间:2022-11-12 08:56:44
private static final String SMS_AUTHORITY = "sms";
public static final Uri SMS_CONTENT_URI = Uri.parse("content://"
            + SMS_AUTHORITY);



private void upSMSTable() {
                // TODO Auto-generated method stub
                Cursor smscur = CR.query(SMS_CONTENT_URI, sms_porjection, null, null,
                                "date");
                Cursor cur = CR.query(CONTENT_URI, local_projection, "EvFlag = ?",
                                new String[] { String.valueOf(3) }, "EvTime");
                if (smscur.getCount() > cur.getCount()) {

                        // Add a new record to SMS.这句可以执行到,当有新短信的时候
.....
                        smscur.close();

                } else if (smscur.getCount() < cur.getCount())//现在的问题是根本执行不到这句,
不知道是什么原因?难道uri不同导致的?
 {
                        // Delete a message.
                        
                        }
                        cur.close();
                } else {
                        // SMS Count() = cur Count()??
                        
                        smscur.close();
                        cur.close();
                }

        }


短信监听第一贴
引用 24 楼 ameyume 的回复:
引用 23 楼 zhq56030207 的回复:
我只是在监控收件箱里面的短信...

监控收件箱里的短信,如果有变化就可以跟着同步最新的,是吗?
是的
可是android的短信好像没有收件箱和发件箱?因为它的短信的删除不是一条一条的,而是一个对话组的删除....
 Cursor smscur = CR.query(SMS_CONTENT_URI, sms_porjection, null, null,
                                "date");
smscur.getCount()应该是监听收件箱和发件箱里面的短信,++++ 如果它获得的计数<我的cur.getCount()的计数++++++可是偏偏这个好像监听不了....拜托朋友们帮帮忙,提示一下....谢谢了

18 个解决方案

#1


现在好像又发现问题:
一.当我一条一条的删除短信的时候,会执行到同步删除操作,也就是当短信的数目减少时,我的程序里面也会同步的更新
二. 但是如果是一下子删除整个两个人的会话,也就是删除了大于2条的短信时,则监听不到++++无法执行到[color=#339966]else if (smscur.getCount() < cur.getCount())//[/color]
不知道是为什么?
是不是逐条删除和完整删除有区别?可是这些区别在什么地方?希望有知道的朋友解答...

#2


else if (smscur.getCount() < cur.getCount()) //这里面相当于是在操作逐条进行删除的更新
 {
                        // Delete a message.
                        
                        }
                        cur.close();
                } 
else if (会话删除)

if(短信的计数<我的计数)

   执行更新...//这些都该如何写呢?

}else {
                        // SMS Count() = cur Count()??
                        
                        smscur.close();
                        cur.close();
                }

        }

#3


引用 1 楼 zhq56030207 的回复:
现在好像又发现问题:
一.当我一条一条的删除短信的时候,会执行到同步删除操作,也就是当短信的数目减少时,我的程序里面也会同步的更新
二.但是如果是一下子删除整个两个人的会话,也就是删除了大于2条的短信时,则监听不到++++无法执行到 else if (smscur.getCount() < cur.getCount())//
不知道是为什么?
是……

是不是删除一条的时候是根据短信id删除的,而删除整个会话时是按照联系人或者会话的id(如果有的话)来删除的?
另外,删除多条短息时,是不是在都删除了才执行的commit提交数据库修改?或者执行了批处理删除?
对这方面不熟悉,只能按照常理推论下,呵呵!

#4


引用 3 楼 ameyume 的回复:
引用 1 楼 zhq56030207 的回复:
现在好像又发现问题:
一.当我一条一条的删除短信的时候,会执行到同步删除操作,也就是当短信的数目减少时,我的程序里面也会同步的更新
二.但是如果是一下子删除整个两个人的会话,也就是删除了大于2条的短信时,则监听不到++++无法执行到else if (smscur.getCount() < cur.getCount())//
不知道是为什么?……
谢谢回复,一下子删除,应该是smscur得不到count,所以..我也不知道具体原因..

#5


删除会话看到你是这样写的
1. getContentResolver().delete(        
2.                     Uri.parse("content://sms/conversations/"        +            threadid,        
3.                     "_id = " + idelete, null); 
那么,监听删除的时候是不是也要监听会话的删除?
监听的uri的问题?

#6


引用 5 楼 ameyume 的回复:
删除会话看到你是这样写的
1. getContentResolver().delete(        
2.                     Uri.parse("content://sms/conversations/"        +            threadid,        
3.                     "_id = " + idelete……
不是啊 监听是按短信的条数监听的啊 但是不知道删除会话的时候,,,会怎么回事?

#7


再顶一哈,希望有人回答,谢谢

#8


哈喽 帮帮忙~~

#9


我觉得关键问题是你如何调用upSMSTable()这个函数。如果你调用这个函数时数据库的短信并没有被删除,那自然比较数目时就会相等,因此监听就会失败,
还是你会类timer的形式去做?最好用ContentObserver去做,我觉得

#10


引用 9 楼 alicktony 的回复:
我觉得关键问题是你如何调用upSMSTable()这个函数。如果你调用这个函数时数据库的短信并没有被删除,那自然比较数目时就会相等,因此监听就会失败,
还是你会类timer的形式去做?最好用ContentObserver去做,我觉得
已经被删除了,但是就是监听不到,好像是会话的监听和一条条的监听有区别~

#11


upSMSTable()你这个函数怎么被调用的?timer形式去被调用的的吗?

#12


引用 11 楼 alicktony 的回复:
upSMSTable()你这个函数怎么被调用的?timer形式去被调用的的吗?
不懂你的意思~~~~~~~~~

#13


现在告诉你吧
那个会话的现在监听不了的!因为THREDS表已经给GOGLES封的了

#14


引用 13 楼 landerson 的回复:
现在告诉你吧
那个会话的现在监听不了的!因为THREDS表已经给GOGLES封的了

真的吗?那不是很悲剧吗?别人以会话删除的方式删除短信的话 我这边根本就监听不了,该怎么办呢???

#15


各位 拜托 知道的帮帮忙噢~~~~

#16


还是没有解决 怎么办?

#17


mark 下

#18


该回复于2012-03-05 16:38:20被版主删除

#1


现在好像又发现问题:
一.当我一条一条的删除短信的时候,会执行到同步删除操作,也就是当短信的数目减少时,我的程序里面也会同步的更新
二. 但是如果是一下子删除整个两个人的会话,也就是删除了大于2条的短信时,则监听不到++++无法执行到[color=#339966]else if (smscur.getCount() < cur.getCount())//[/color]
不知道是为什么?
是不是逐条删除和完整删除有区别?可是这些区别在什么地方?希望有知道的朋友解答...

#2


else if (smscur.getCount() < cur.getCount()) //这里面相当于是在操作逐条进行删除的更新
 {
                        // Delete a message.
                        
                        }
                        cur.close();
                } 
else if (会话删除)

if(短信的计数<我的计数)

   执行更新...//这些都该如何写呢?

}else {
                        // SMS Count() = cur Count()??
                        
                        smscur.close();
                        cur.close();
                }

        }

#3


引用 1 楼 zhq56030207 的回复:
现在好像又发现问题:
一.当我一条一条的删除短信的时候,会执行到同步删除操作,也就是当短信的数目减少时,我的程序里面也会同步的更新
二.但是如果是一下子删除整个两个人的会话,也就是删除了大于2条的短信时,则监听不到++++无法执行到 else if (smscur.getCount() < cur.getCount())//
不知道是为什么?
是……

是不是删除一条的时候是根据短信id删除的,而删除整个会话时是按照联系人或者会话的id(如果有的话)来删除的?
另外,删除多条短息时,是不是在都删除了才执行的commit提交数据库修改?或者执行了批处理删除?
对这方面不熟悉,只能按照常理推论下,呵呵!

#4


引用 3 楼 ameyume 的回复:
引用 1 楼 zhq56030207 的回复:
现在好像又发现问题:
一.当我一条一条的删除短信的时候,会执行到同步删除操作,也就是当短信的数目减少时,我的程序里面也会同步的更新
二.但是如果是一下子删除整个两个人的会话,也就是删除了大于2条的短信时,则监听不到++++无法执行到else if (smscur.getCount() < cur.getCount())//
不知道是为什么?……
谢谢回复,一下子删除,应该是smscur得不到count,所以..我也不知道具体原因..

#5


删除会话看到你是这样写的
1. getContentResolver().delete(        
2.                     Uri.parse("content://sms/conversations/"        +            threadid,        
3.                     "_id = " + idelete, null); 
那么,监听删除的时候是不是也要监听会话的删除?
监听的uri的问题?

#6


引用 5 楼 ameyume 的回复:
删除会话看到你是这样写的
1. getContentResolver().delete(        
2.                     Uri.parse("content://sms/conversations/"        +            threadid,        
3.                     "_id = " + idelete……
不是啊 监听是按短信的条数监听的啊 但是不知道删除会话的时候,,,会怎么回事?

#7


再顶一哈,希望有人回答,谢谢

#8


哈喽 帮帮忙~~

#9


我觉得关键问题是你如何调用upSMSTable()这个函数。如果你调用这个函数时数据库的短信并没有被删除,那自然比较数目时就会相等,因此监听就会失败,
还是你会类timer的形式去做?最好用ContentObserver去做,我觉得

#10


引用 9 楼 alicktony 的回复:
我觉得关键问题是你如何调用upSMSTable()这个函数。如果你调用这个函数时数据库的短信并没有被删除,那自然比较数目时就会相等,因此监听就会失败,
还是你会类timer的形式去做?最好用ContentObserver去做,我觉得
已经被删除了,但是就是监听不到,好像是会话的监听和一条条的监听有区别~

#11


upSMSTable()你这个函数怎么被调用的?timer形式去被调用的的吗?

#12


引用 11 楼 alicktony 的回复:
upSMSTable()你这个函数怎么被调用的?timer形式去被调用的的吗?
不懂你的意思~~~~~~~~~

#13


现在告诉你吧
那个会话的现在监听不了的!因为THREDS表已经给GOGLES封的了

#14


引用 13 楼 landerson 的回复:
现在告诉你吧
那个会话的现在监听不了的!因为THREDS表已经给GOGLES封的了

真的吗?那不是很悲剧吗?别人以会话删除的方式删除短信的话 我这边根本就监听不了,该怎么办呢???

#15


各位 拜托 知道的帮帮忙噢~~~~

#16


还是没有解决 怎么办?

#17


mark 下

#18


该回复于2012-03-05 16:38:20被版主删除