rawContact子表之StructuredName

本文深入探讨了Android系统中用于存储联系人姓名信息的StructuredName类,详细介绍了其内部结构、存储方式及关键字段的含义。
public static final class
ContactsContract.CommonDataKinds .StructuredName
extends Object

Column aliases

Type Alias Data column
String DISPLAY_NAME DATA1
String GIVEN_NAME DATA2
String FAMILY_NAME DATA3
String PREFIX DATA4 Common prefixes in English names are "Mr", "Ms", "Dr" etc.
String MIDDLE_NAME DATA5
String SUFFIX DATA6 Common suffixes in English names are "Sr", "Jr", "III" etc.
String PHONETIC_GIVEN_NAME DATA7 Used for phonetic spelling of the name, e.g. Pinyin, Katakana, Hiragana
String PHONETIC_MIDDLE_NAME DATA8
String PHONETIC_FAMILY_NAME DATA9

StructuredName中主要保存的是联系人 姓名,其 称呼名和其 拼音名
姓名的表示有以下两种方式:
第一种:DISPLAY_NAME
第二种:GIVEN_NAME+FAMILY_NAME
:第一种和第二种应该是 互斥的。有些手机支持第一种,有些则支持第二种。但必须支持其中的一种。
称呼名 ,是指对人的称呼。比如 Mr Hu。它只有一个表示形式:PREFIX+MIDDLE_NAME+SUFFIX
:很多手机都不支持该项。
拼音名是指汉语拼音的形式,或片假名的形式,或平假名的形式等。
它只有一个表示形式:PHONETIC_GIVEN_NAME+PHONETIC_MIDDLE_NAME+PHONETIC_FAMILY_NAME
:很多手机都不支持该项。
最后
关于StructuredName的更多内容请参照
关于rawContact的更多信息请参照《 RawContacts 》和《rawContact数据插入 》和《raw contact子表数据查询
<wbr style="line-height:25px"></wbr>
protected fun addContact(contact: Contact): Struct { val ops = arrayListOf<ContentProviderOperation>() ops += ContentProviderOperation.newInsert(ContactsContract.RawContacts.CONTENT_URI) .withValue(ContactsContract.RawContacts.ACCOUNT_TYPE, null) .withValue(ContactsContract.RawContacts.ACCOUNT_NAME, null) .build() ops += ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI) .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0) .withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE) .withValue(ContactsContract.CommonDataKinds.StructuredName.GIVEN_NAME, contact.givenName) .withValue(ContactsContract.CommonDataKinds.StructuredName.MIDDLE_NAME, contact.middleName) .withValue(ContactsContract.CommonDataKinds.StructuredName.FAMILY_NAME, contact.familyName) .withValue(ContactsContract.CommonDataKinds.StructuredName.PREFIX, contact.prefix) .withValue(ContactsContract.CommonDataKinds.StructuredName.SUFFIX, contact.suffix).build() ops += ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI) .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0) .withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Note.CONTENT_ITEM_TYPE) .withValue(ContactsContract.CommonDataKinds.Note.NOTE, contact.note) .build() ops += ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI) .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0) .withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Organization.CONTENT_ITEM_TYPE) .withValue(ContactsContract.CommonDataKinds.Organization.COMPANY, contact.company) .withValue(ContactsContract.CommonDataKinds.Organization.TITLE, contact.jobTitle).withYieldAllowed(true) .build() //Phones for (phone in contact.phones) { ops += ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI) .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0) .withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE) .withValue(ContactsContract.CommonDataKinds.Phone.NUMBER, phone.value) .withTypeAndLabel(ItemType.phone, phone.label) .build() } //Emails for (email in contact.emails) { ops += ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI) .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0) .withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Email.CONTENT_ITEM_TYPE) .withValue(ContactsContract.CommonDataKinds.Email.ADDRESS, email.value) .withTypeAndLabel(ItemType.email, email.label) .build() } //Postal addresses for (address in contact.postalAddresses) { ops += ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI) .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0) .withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.StructuredPostal.CONTENT_ITEM_TYPE) .withTypeAndLabel(ItemType.address, address.label) .withValue(ContactsContract.CommonDataKinds.StructuredPostal.STREET, address.street) .withValue(ContactsContract.CommonDataKinds.StructuredPostal.CITY, address.city) .withValue(ContactsContract.CommonDataKinds.StructuredPostal.REGION, address.region) .withValue(ContactsContract.CommonDataKinds.StructuredPostal.POSTCODE, address.postcode) .withValue(ContactsContract.CommonDataKinds.StructuredPostal.COUNTRY, address.country) .build() } for (date in contact.dates) { ops += ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI) .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0) .withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Event.CONTENT_ITEM_TYPE) .withTypeAndLabel(ItemType.event, date.label) .withValue(ContactsContract.CommonDataKinds.Event.START_DATE, date.toDateValue()) .build() } for (url in contact.urls) { ops += ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI) .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0) .withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Website.CONTENT_ITEM_TYPE) .withTypeAndLabel(ItemType.url, url.label) .withValue(ContactsContract.CommonDataKinds.Website.URL, url.value) .build() } val saveResult = context.contentResolver.applyBatch(ContactsContract.AUTHORITY, ops) val contactId = saveResult.first().uri?.lastPathSegment?.toLong() ?: pluginError("invalidId", "Expected a valid id") return getContact(ContactKeys(contactId), withThumbnails = true, photoHighResolution = true) } 逐行注释解析
10-25
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值