相关疑难解决方法(0)

Android:内容观察者的"onChange()"方法被多次调用

我正在使用内容观察员content://sms.我正在将所有消息写入SD卡中的文本文件.但是onChange()内容观察器中的方法被多次调用,并且相同的消息被多次写入文本文件.怎么避免这个?另外我想知道内容观察者是否会放慢手机的速度.

android contentobserver

10
推荐指数
1
解决办法
9679
查看次数

Sms ContentObserver onChange()会多次触发

我知道这个问题已被多次询问,但没有人能够从我所看到的那里得到一个有效的答案.

我正在开发一个应用程序拦截短信,并根据发送#,弹出一个自定义提醒.我让它与广播接收器完美配合,但是如果用户安装了goSms,那么onReceive()方法永远不会被调用,因为goSms在它到达我的应用程序之前就会中止它.

为了解决这个问题,我尝试了一个关于content://sms/ 它的内容观察者工作得很好,但是它onChange()被调用两次,具有完全相同的参数.我试过检查时间戳,但它们是相同的,就像我设置的类型和其他所有参数一样.

从我所看到的情况来看,这是一个常见的问题,但不是我见过的任何一个问题.

    @Override
public void onChange(boolean selfChange) {
    super.onChange(selfChange);
    querySMS();
}

protected void querySMS() {
    Cursor cur = getContentResolver().query(u, null, null, null, null);
    cur.moveToNext(); // this will make it point to the first record, which is the last SMS sent
    String type = cur.getString(cur.getColumnIndex("type"));
    String body = cur.getString(cur.getColumnIndex("body")); //content of sms
    String add = cur.getString(cur.getColumnIndex("address")); //phone num
    if (type.equals("1")) {
        if (add.equals(Test.SENDER)) {              
            String[] bodys = body.split(" ", 7);
            if (bodys[0].equals("test")) { …
Run Code Online (Sandbox Code Playgroud)

java android contentobserver

7
推荐指数
1
解决办法
4836
查看次数

标签 统计

android ×2

contentobserver ×2

java ×1