SMS收件箱中的ContentObserver无法正常工作

时间:2013-01-21 00:20:54

标签: android contentobserver

我启动了一项服务,在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

3 个答案:

答案 0 :(得分:1)

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

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

- 然后,在ContentObserver

中覆盖以下方法
@Override    
public void onChange(boolean selfChange, Uri uri){}

答案 1 :(得分:0)

尝试使用广播接收器:。 是必要的注册广播。请参阅:Problem with SMS Broadcast receiver

答案 2 :(得分:0)

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