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