temporaryなめも帳

だらだらと備忘録とか。誰かの為になることをねがって。

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を渡しているところがポイントですね。