私は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 を使用できますか?