DBに変更があった場合ContentResolverのcallbackを呼び出す

データベースのデータが追加、変更、削除されたときに特定の処理を呼びたいってありますよね。うん、あるある。
AndroidだとregisterContentObserverとnotifyChangeを使うとできます。例えばこんな感じ。

メインの処理側

...
ContentObserver contentObserver = new ContentObserver(new Handler()) {
    @Override
    public void onChange(boolean selfChange) {
        super.onChange(selfChange);
        //データベースに変更があったときに呼び出したい処理を書く
    }
};
//ObserverをContentResolverに登録
getContentResolver().registerContentObserver(URI, true, contentObserver);
...

ContentProviderを継承したクラス。この場合はinsertを例に書いてます。

@Override
public Uri insert(Uri uri, ContentValues contentvalues) {
	SQLiteDatabase db = databaseHelper.getWritableDatabase();
	db.insert("test", null, contentvalues);
        //通知を発したいDB処理の中でnogifyChangeを呼ぶ
	getContext().getContentResolver().notifyChange(uri, null);
	return null;
}