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