質問

連絡先データベースの変更をリッスンしようとしています。

だから、 ContentObserver の子クラスであるcontentObserverを作成します:

 private class MyContentObserver extends ContentObserver {

        public MyContentObserver() {
            super(null);
        }

        @Override
        public void onChange(boolean selfChange) {
            super.onChange(selfChange);
            System.out.println (" Calling onChange" );
        }

    }

MyContentObserver contentObserver = new MyContentObserver();
context.getContentResolver().registerContentObserver (People.CONTENT_URI, true, contentObserver);

ただし、「 EditContactActivity 」を使用して連絡先データベースを変更すると、 onChange()が呼び出されません。

役に立ちましたか?

解決

サンプルをそのままデプロイしましたが、正常に動作します。

package com.test.contentobserver;

import android.app.Activity;
import android.database.ContentObserver;
import android.os.Bundle;
import android.provider.Contacts.People;

public class TestContentObserver extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        this.getApplicationContext().getContentResolver().registerContentObserver (People.CONTENT_URI, true, contentObserver);
    }

    private class MyContentObserver extends ContentObserver {

        public MyContentObserver() {
            super(null);
        }

        @Override
        public void onChange(boolean selfChange) {
            super.onChange(selfChange);
        }

    }

    MyContentObserver contentObserver = new MyContentObserver();

}

だから、あなたは何か間違ったことをしているに違いない。

オブザーバーが登録されているカーソルを使用して変更を行っていますか?

Observer関数deliverSelfNotifications()で確認してください。 (デフォルトでfalseを返します)

次のようなオブザーバ関数をオーバーライドすることもできます。

@Override
public boolean deliverSelfNotifications() {
    return true;
    }

People.CONTENT_URIが正しい値(android.provider.Contacts.People)を参照していることを確認してください。

また、ハンドラをContentObserverで使用することをお勧めしますが、この場合、コードが間違っているわけではありません。

他のヒント

MannyNSの答えに関する簡単なヒント。

ここでは、 People.CONTENT_URI は非推奨です。

代わりに次のようにコードします。-> ContactsContract.Contacts.CONTENT_URI

    getApplicationContext().getContentResolver().registerContentObserver(ContactsContract.Contacts.CONTENT_URI, true, contentobserver);
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top