【发布时间】:2021-04-05 01:56:45
【问题描述】:
首先,我的联系人插入代码:
fun makeRawContact(): ContentProviderOperation.Builder {
return ContentProviderOperation.newInsert(ContactsContract.RawContacts.CONTENT_URI)
.withValue(ContactsContract.RawContacts.ACCOUNT_TYPE, getString(R.string.account_type_contacts))
.withValue(ContactsContract.RawContacts.ACCOUNT_NAME, accountName)
}
fun makeData(mimeType: String): ContentProviderOperation.Builder {
return ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
.withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0)
.withValue(ContactsContract.Data.MIMETYPE, mimeType)
}
fun insert(): Int {
val ops = ArrayList<ContentProviderOperation>()
ops += makeRawContact().build()
ops += makeData(ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE)
.withValue(ContactsContract.CommonDataKinds.StructuredName.GIVEN_NAME, "testinsert")
.build()
ops += makeData(ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE)
.withValue(ContactsContract.CommonDataKinds.Phone.NUMBER, "12345678")
.withValue(ContactsContract.CommonDataKinds.Phone.TYPE, 1)
.withValue(ContactsContract.CommonDataKinds.Phone.LABEL, null)
.build()
val result = contentResolver.applyBatch(ContactsContract.AUTHORITY, ops)
}
假设通过调用insert(),原始id 为8。
如果我想更新联系人姓名,我会这样打电话:
fun updateData(rawId: Long, mimeType: String): ContentProviderOperation.Builder {
return ContentProviderOperation.newUpdate(ContactsContract.Data.CONTENT_URI)
.withSelection(ContactsContract.Data.RAW_CONTACT_ID + "=?", arrayOf(rawId.toString()))
.withValue(ContactsContract.Data.MIMETYPE, mimeType)
}
fun update() {
val ops = ArrayList<ContentProviderOperation>()
ops += updateData(8, ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE)
.withValue(ContactsContract.CommonDataKinds.StructuredName.GIVEN_NAME, "testupdate")
.build()
val result = contentResolver.applyBatch(ContactsContract.AUTHORITY, ops)
}
我想更新原始 ID 为 8 的联系人的两个电话号码,但它只有一个电话号码 12345678。
我认为应该更新一个,另一个应该插入,所以我试图通过ContentResolver和原始ID获取电话号码的数据ID。但这似乎很复杂,所以我提出问题。有没有更好的办法?我已经看到了如何删除所有并插入新的电话号码,但我相信有更好的方法。
谢谢。
【问题讨论】:
标签: android android-contentprovider android-contacts android-contentresolver