SyncAdapter 可以修改另一个 SyncAdapter 添加的 RawContacts 吗?
Can a SyncAdapter modify RawContacts added by another SyncAdapter?
如果帐户 A 的 SyncAdapter A 在 ContactsContract.RawContacts table 中创建原始联系人,帐户 B 的 SyncAdapter B 是否可以更新 SyncAdapter A 添加的 RawContact。
特别感兴趣的是 sync1 或原始联系人中的任何同步字段 table?
如果这是可能的,结果可能会出现什么问题。
任何人都可以展示应该如何完成的示例吗?
Contacts
数据库上没有每个联系人权限模型,每个应用程序和每个 SyncAdapter
具有 Contacts
权限的人都可以 read/write 到任何字段任何联系人。
但是,RawContact
下的 syncX
字段被拥有者 SyncAdapter
用于专有目的(例如,跟踪哪些联系人需要同步,哪个是脏的,何时它是上次同步的,后端联系人 ID 值等),因此请确保您不要触摸任何您不知道它的用途的东西,否则您可能会冒损坏某些联系人的风险。
要修改 ID 1234
上 RawContact
上的 Sync1
值,请执行:
ContentResolver cr = context.getContentResolver();
ContentValues values = new ContentValues(2);
values.put(RawContacts.SYNC1, "Hello World");
cr.update(RawContacts.CONTENT_URI, values, RawContacts._ID + "=" + 1234, null);
UPDATE - 批量更新
ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();
ops.add(ContentProviderOperation.newUpdate(RawContacts.CONTENT_URI)
.withSelection(RawContacts._ID + "=" + 1234, null)
.withValue(RawContacts.SYNC1, "Hello")
.build());
ops.add(ContentProviderOperation.newUpdate(RawContacts.CONTENT_URI)
.withSelection(RawContacts._ID + "=" + 5678, null)
.withValue(RawContacts.SYNC1, "World")
.build());
getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops);
如果帐户 A 的 SyncAdapter A 在 ContactsContract.RawContacts table 中创建原始联系人,帐户 B 的 SyncAdapter B 是否可以更新 SyncAdapter A 添加的 RawContact。
特别感兴趣的是 sync1 或原始联系人中的任何同步字段 table?
如果这是可能的,结果可能会出现什么问题。
任何人都可以展示应该如何完成的示例吗?
Contacts
数据库上没有每个联系人权限模型,每个应用程序和每个 SyncAdapter
具有 Contacts
权限的人都可以 read/write 到任何字段任何联系人。
但是,RawContact
下的 syncX
字段被拥有者 SyncAdapter
用于专有目的(例如,跟踪哪些联系人需要同步,哪个是脏的,何时它是上次同步的,后端联系人 ID 值等),因此请确保您不要触摸任何您不知道它的用途的东西,否则您可能会冒损坏某些联系人的风险。
要修改 ID 1234
上 RawContact
上的 Sync1
值,请执行:
ContentResolver cr = context.getContentResolver();
ContentValues values = new ContentValues(2);
values.put(RawContacts.SYNC1, "Hello World");
cr.update(RawContacts.CONTENT_URI, values, RawContacts._ID + "=" + 1234, null);
UPDATE - 批量更新
ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();
ops.add(ContentProviderOperation.newUpdate(RawContacts.CONTENT_URI)
.withSelection(RawContacts._ID + "=" + 1234, null)
.withValue(RawContacts.SYNC1, "Hello")
.build());
ops.add(ContentProviderOperation.newUpdate(RawContacts.CONTENT_URI)
.withSelection(RawContacts._ID + "=" + 5678, null)
.withValue(RawContacts.SYNC1, "World")
.build());
getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops);