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