private fun exportToApp() { thread { var count=0 for (contacti in contactList){ if(contacti.isChecked){ // //创建联系人实例:使用 ContentResolver 来获取 ContactsContract.Contacts 类的实例。 val contentResolver = getContentResolver() val contact = ContentValues() //添加联系人姓名:使用 put 方法来添加联系人的姓名。 contact.put(ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME, contacti.name) //添加联系人电话号码 contact.put("phone",contacti.phone) //添加联系人邮箱:使用 ContactsContract.CommonDataKinds.Email 类来添加邮箱,并将其与联系人关联起来。 contact.put("email", contacti.email) //插入联系人记录:使用 ContentResolver 的 insert 方法将联系人记录插入到通讯录中。 // val uri = Uri.parse(ContactsContract.Contacts.CONTENT_URI.toString()) val uri:Uri? = contentResolver.insert(ContactsContract.Contacts.CONTENT_URI, contact) // contentResolver.insert(uri,contact) count++ } } runOnUiThread { Toast.makeText(this,"已导出${count}位联系人!",Toast.LENGTH_LONG).show() } } finish() }这段代码产生了java.lang.UnsupportedOperationException: Aggregate contacts are created automatically问题,请分析错误原因
时间: 2024-01-24 12:04:55 浏览: 22
这个错误的原因是您在插入联系人记录时,使用了错误的URI。在Android系统中,联系人记录分为两种类型:单个联系人记录和聚合联系人记录。单个联系人记录对应的URI为`ContactsContract.RawContacts.CONTENT_URI`,而聚合联系人记录对应的URI为`ContactsContract.Contacts.CONTENT_URI`。在您的代码中,应该使用`ContactsContract.RawContacts.CONTENT_URI`来插入单个联系人记录,而不是使用`ContactsContract.Contacts.CONTENT_URI`。
另外,您在添加联系人电话号码和邮箱地址时,使用了错误的字段名。正确的字段名应该是`ContactsContract.CommonDataKinds.Phone.NUMBER`和`ContactsContract.CommonDataKinds.Email.ADDRESS`。
修改后的代码如下所示:
```kotlin
private fun exportToApp() {
thread {
var count = 0
for (contacti in contactList) {
if (contacti.isChecked) {
val contentResolver = getContentResolver()
val contact = ContentValues().apply {
put(ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME, contacti.name)
}
val uri: Uri? = contentResolver.insert(ContactsContract.RawContacts.CONTENT_URI, contact)
val rawContactId = uri?.lastPathSegment
val phone = ContentValues().apply {
put(ContactsContract.Data.RAW_CONTACT_ID, rawContactId)
put(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE)
put(ContactsContract.CommonDataKinds.Phone.NUMBER, contacti.phone)
}
contentResolver.insert(ContactsContract.Data.CONTENT_URI, phone)
val email = ContentValues().apply {
put(ContactsContract.Data.RAW_CONTACT_ID, rawContactId)
put(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Email.CONTENT_ITEM_TYPE)
put(ContactsContract.CommonDataKinds.Email.ADDRESS, contacti.email)
}
contentResolver.insert(ContactsContract.Data.CONTENT_URI, email)
count++
}
}
runOnUiThread {
Toast.makeText(this,"已导出${count}位联系人!",Toast.LENGTH_LONG).show()
}
}
finish()
}
```