【问题标题】:Adding contact using sync adapter makes sync adapter keep syncing in infinite loop使用同步适配器添加联系人使同步适配器保持无限循环同步
【发布时间】:2016-01-09 15:07:42
【问题描述】:

我已经实现了一个同步适配器,它将我的联系人与服务器同步,并返回更少的在我的应用程序上注册的联系人。我将我的应用程序帐户添加到这些联系人中,并将它们添加到我的电话簿联系人中。 我实现了一个观察者类,它观察我的电话簿联系人是否有任何变化(如添加、编辑或删除),如下所示

protected void onCreate(final Bundle savedInstanceState){
    super.onCreate(savedInstanceState);

    mAccount = CreateSyncAccount(this);
    ContentResolver.setSyncAutomatically(mAccount, AUTHORITY, true);

    mResolver = getContentResolver();
    mUri = new Uri.Builder()
            .scheme(SCHEME)
            .authority(AUTHORITY)
            .path(TABLE_PATH)
            .build();
    TableObserver observer = new TableObserver();
    mResolver.registerContentObserver(ContactsContract.Contacts.CONTENT_URI, true, observer);

通过这样做,同步适配器进入无限循环并保持与服务器同步联系人。

我猜这可能是因为添加了联系人,并且观察者在使用同步适配器添加联系人时一次又一次地启动同步适配器。

MyObserver 类的 onChange 方法是这样的:

@Override
    public void onChange(boolean selfChange, Uri changeUri) {
        mResolver.requestSync(mAccount, AUTHORITY, new Bundle());
    }

请帮我解决如何仅在用户手动修改电话簿联系人时才能同步联系人,而不是在同步适配器添加联系人时。 谢谢

【问题讨论】:

    标签: android performance android-syncadapter


    【解决方案1】:

    无需注册ContentObserver 即可自行触发同步。如果您的同步适配器配置正确,Android 将在创建、修改或删除联系人时自动触发同步。

    只需确保您的同步适配器已在同步适配器 xml 文件中设置 android:supportsUploading="true"

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-12
      • 2012-01-10
      • 1970-01-01
      • 2013-11-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多