我正在开发一款Android应用。在这个应用程序中,我必须将联系人与“Android联系人”同步。
我读了一些关于这个主题的复杂文章。例如;
http://www.c99.org/2010/01/23/writing-an-android-sync-provider-part-2/
这是同步联系人的好例子,但我不认为为此创建一个新帐户。因此,手动决定同步联系人并再次搜索。我找到了ContentObserver。
how to listen for changes in Contact Database
我的问题是;
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);
和unmark;
//this.getApplicationContext().getContentResolver().registerContentObserver (ContactsContract.Contacts.CONTENT_URI, true, contentObserver);
我可以处理更改联系人更改。但Android只是调用onChange方法。
如果在联系人更改时尝试使用此代码(带光标),我无法看到对onChange()的任何调用。
我如何处理“Wich row被改变了?”。
OR
我是否可以在没有新帐户的情况下使用AbstractThreadedSyncAdapter进行同步联系,如果是这样的话?
感谢。