4

私はAndroidアプリを開発しています。このアプリでは、連絡先を「Android 連絡先」と同期する必要があります。

私はこの主題についていくつかの複雑な文章を読みました。例えば:

http://www.c99.org/2010/01/23/writing-an-android-sync-provider-part-2/

これは連絡先の同期の良い例ですが、このために新しいアカウントを作成する必要はないと思います。そのため、連絡先を手動で同期することを決定し、再度検索します。ContentObserver を見つけました。

連絡先データベースの変更をリッスンする方法

私の質問は:

public class DenemeObserverActivity extends Activity {

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    Log.d("MyTag", "OnCreate---");
    //this.getApplicationContext().getContentResolver().registerContentObserver (ContactsContract.Contacts.CONTENT_URI, true, contentObserver);


    Cursor cursor = managedQuery(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);
    cursor.setNotificationUri(this.getApplicationContext().getContentResolver(), ContactsContract.Contacts.CONTENT_URI);
    this.getApplicationContext().getContentResolver().notifyChange(ContactsContract.Contacts.CONTENT_URI, null);
    cursor.registerContentObserver(contentObserver);


}

private class MyContentObserver extends ContentObserver {

    public MyContentObserver() {
        super(null);
    }

    @Override
    public boolean deliverSelfNotifications() {
        Log.d("MyTag", "DeliverSelfNotifications---");
        return true;
        }

    @Override
    public void onChange(boolean selfChange) {
        super.onChange(selfChange);
        Log.d("MyTag", "onChanges---");
    }

}


MyContentObserver contentObserver = new MyContentObserver(); 

このコードで、これらの行を削除すると:

Cursor cursor = managedQuery(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);
cursor.setNotificationUri(this.getApplicationContext().getContentResolver(), ContactsContract.Contacts.CONTENT_URI);
this.getApplicationContext().getContentResolver().notifyChange(ContactsContract.Contacts.CONTENT_URI, null);
cursor.registerContentObserver(contentObserver);

マークを外します: //this.getApplicationContext().getContentResolver().registerContentObserver (ContactsContract.Contacts.CONTENT_URI, true, contentObserver);

変更連絡先の変更を処理できます。しかし、Android は onChange メソッドを呼び出すだけです。

連絡先が変更されたときにこのコードを (カーソルを使用して) 試してみると、onChange() の呼び出しが表示されません。

「どの行が変更されましたか?」を処理するにはどうすればよいですか?

また

新しいアカウントなしで連絡先を同期するために AbstractThreadedSyncAdapter を使用できますか?

4

0 に答える 0