系统自带的数据库的Provider中都有通知该数据库观察者数据库更新的机制。
比如在CallLogProvider的代码中发现了通知数据库进行更新了。代码如下:
protected void notifyChange() {
getContext().getContentResolver().notifyChange(CallLog.CONTENT_URI, null,
false /* wake up sync adapters */);
}
要想在自定义的数据库中也能使用ContentObserver,必须在数据库Dao中所有修改数据的方法中添加如下代码:
getContext().getContentResolver().notifyChange(自定义uri, null)
在你要使用ContentObserver的地方注册该uri的观察者;
例如:
1.Dao中通知更新:
public boolean insert(String packname) {
SQLiteDatabase db = helper.getWritableDatabase();
ContentValues values = new ContentValues();
values.put("packname", packname);
long id = db.insert("lockinfo", null, values);
db.close();
if(id!=-1){
context.getContentResolver().notifyChange(
Uri.parse("content://com.mobilesecurity.updateLockDb"),
null);
return true;
}
return false;
}
public boolean delete(String packname) {
SQLiteDatabase db = helper.getWritableDatabase();
int count = db.delete("lockinfo", "packname = ?",
new String[] { packname });
db.close();
if (count > 0) {
context.getContentResolver().notifyChange(
Uri.parse("content://com.mobilesecurity.updateLockDb"),
null);
return true;
}
return false;
}
2. 注册ContentObserver:
observer =new MyDbObserver(new Handler());
Uri uri = Uri.parse("content://com.mobilesecurity.updateLockDb");
getContentResolver().registerContentObserver(uri, true, observer);
这样就可以在自定义的数据库中使用内容观察者了。