有没有办法判断ContentObserver被触发的原因?例如,如果我通过"content:// SMS“URI监视SMS,并且发送或接收了SMS,那么是否可以在ContentObserver类中推断SMS类型(我知道我可以设置N ContentObservers,指定不同的URI,但我希望有一种方法可以从ContentObserver类中辨别出来)?
奖励:还有一个有趣的微妙之处:
第二种方法仅在API级别16以上可用,因此代码不应依赖于URI才能正常工作。
ContentObserver:
ContentResolver contentResolver = getBaseContext().getContentResolver();
contentResolver.registerContentObserver(Uri.parse("content://sms"), true,
new MessageObserver(new Handler(), getBaseContext()));ContentObserver类:
class SMSObserver extends ContentObserver {
public MyObserver(Handler handler) {
super(handler);
}
@Override
public void onChange(boolean selfChange) {
this.onChange(selfChange, null);
// What SMS type caused this to trigger????????
}
@Override
public void onChange(boolean selfChange, Uri uri) {
// What SMS type caused this to trigger????????
}
}发布于 2013-10-01 17:26:31
在以下提到的情况下,您将收到Onchange
现在来弄清楚哪些数据被更改了,为每个可能的URI设置一个观察者根本不是一个好主意,这样虽然你可以检测更新或删除场景,但感知新的插入将是一个问题。我会建议你跟随
保持一个观察者,在初始化时,你可以处理最初可用的整个数据,一旦你前进,保持记住column_id,update_timestamp和总行数,当下一次发生变化时,使用Coulmn_Id,update_timestamp和count你可以弄清楚发生的变化类型
-->查找任何column_id大于您记忆的行,如果它返回任何行,那么肯定会插入一些新行,您可以专门查询它们-->如果以上条件失败,则您需要查找update_timespamp任何大于您所记得的值的值将判断是否已更新的行-->如果以上两个循环都存在,则查找计数的差异,这可能会告诉您有关删除操作的信息。
如果以上都没有发生,那么很明显这不是什么,那么就忽略onchange信号。希望能有所帮助。
https://stackoverflow.com/questions/19101814
复制相似问题