内容观察器上的短信收件箱不工作



我启动一个服务,在SMS inbox上注册ContentObserver,如下所示

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上设置观察者吗?

-首先,像这样注册您的ContentObserver:

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

-然后,在你的ContentObserver中覆盖以下方法:

@Override    
public void onChange(boolean selfChange, Uri uri){}

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

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

最新更新