0

我启动了一个像这样注册ContentObserver的服务SMS inbox

smsObserver = new SmsObserver(new Handler());
getContentResolver().registerContentObserver(Uri.parse("content://sms/inbox"), true, smsObserver);

这是类,我只想知道何时对提供者进行了更改但我没有得到onChange方法的回调

private class SmsObserver extends ContentObserver{

    public SmsObserver(Handler handler) {
        super(handler);
    }

    @Override
    public void onChange(boolean selfChange){
        super.onChange(selfChange);
        Cursor c = getContentResolver().query(Uri.parse("content://sms/inbox"),
                new String[] {"thread_id"},"address" + "=" + from,null,null);
        if(c != null && c.moveToLast()){
            long id = c.getLong(0);
            Log.d("ID", c.getString(0));
        }
        c.close();
    }
}

我还为 Uri 注册了一个观察者,这个观察者content://mms-sms/conversations有效,我只是复制了我从这个到 SmsObserver 类的所有操作,所以我不知道出了什么问题,我可以不设置观察者content://sms/inbox吗?

4

3 回答 3

1

-首先,像这样注册你的ContentObserver

getContentResolver().registerContentObserver(Uri.parse("content://mms-sms/inbox"), true, smsObserver);

- 然后,覆盖您的以下方法ContentObserver

@Override    
public void onChange(boolean selfChange, Uri uri){}
于 2013-03-12T16:20:22.987 回答
0

尝试使用广播接收器:。是必要的登记广播。请参阅:SMS 广播接收器问题

于 2013-01-21T01:57:09.507 回答
0

如果您使用的是广播接收器,则广播结束时将短信放入数据库。这意味着您需要触发 bg 线程并使其休眠一小段时间,然后 sms 将显示在数据库中

于 2013-01-23T03:35:32.620 回答