ContentProviderの変更を受け取る
※忘れがちなので、備忘録。
ContentProviderに登録している値のアップデートを通知するための手段が用意されている。 実装の必要があるのは以下の2つ。
・ update通知処理(ContentProvider側) ・ update通知を受ける処理(利用側)
update通知処理(ContentProvider側)
update/delete/insertとかで以下のメソッドを呼び出す。
getContext().getContentResolver().notifyChange(uri, null);
uriには対象となるCONTENT_URIを含める。正式な仕様はここを参照。
update通知を受ける処理(利用側)
通知を受信したいところで以下の設定を行う。
ContentObserver mContentObserver = new ContentObserver(new Handler()) { @Override public void onChange(boolean selfChange) { super.onChange(selfChange); // 設定が変更された時の処理を書く } }; @Override protected void onResume() { super.onResume(); getContentResolver().registerContentObserver(TARGET_CONTENT_URI,true,mContentObserveer); } @Override protected void onPause() { super.onPause(); getContentResolver().unregisterContentObserver(mContentObserver); }
忘れずにunregisterしておきましょう。 ちなみに、上記のonChangeメソッド内ではUI処理を行うことができます。UIスレッドのLooperに繋がってるHandlerを渡しているところがポイントですね。