Contactscontract不要将某些数据保存到联系人

发布于 2025-02-05 20:32:56 字数 4118 浏览 3 评论 0 原文

我正在使用ContactScontract将大量数据保存到联系人(我真的不希望第二个。当活动启动时,唯一包含我输入信息的字段是:名字,中间名,姓氏,公司,标题,phone1-3 +其标签,电子邮件1和2 +标签以及笔记。

这意味着我缺少前缀,后缀,昵称,im handle and type,整个家庭和工作地址以及日期(Birtdhay和Anniversary)。当然,我只尝试了第一个.Apply {},但结果是相同的。我在做什么错?

val intent = Intent(Intent.ACTION_INSERT, ContactsContract.Contacts.CONTENT_URI).apply {
            type = ContactsContract.RawContacts.CONTENT_TYPE
            putExtra(ContactsContract.Intents.Insert.NAME, fullName)
            putExtra(ContactsContract.CommonDataKinds.StructuredName.GIVEN_NAME, givenName)
            putExtra(ContactsContract.CommonDataKinds.StructuredName.FAMILY_NAME, familyName)
            putExtra(ContactsContract.CommonDataKinds.StructuredName.PREFIX, prefix)
            putExtra(ContactsContract.CommonDataKinds.StructuredName.SUFFIX, suffix)
            putExtra(ContactsContract.CommonDataKinds.Nickname.NAME, nickname)

            putExtra(ContactsContract.Intents.Insert.EMAIL, homeEmail)
            putExtra(ContactsContract.Intents.Insert.EMAIL_TYPE, ContactsContract.CommonDataKinds.Email.TYPE_HOME)
            putExtra(ContactsContract.Intents.Insert.SECONDARY_EMAIL, workEmail)
            putExtra(ContactsContract.Intents.Insert.SECONDARY_EMAIL_TYPE, ContactsContract.CommonDataKinds.Email.TYPE_WORK)

            putExtra(ContactsContract.Intents.Insert.PHONE, cellPhone)
            putExtra(ContactsContract.Intents.Insert.PHONE_TYPE, ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE)
            putExtra(ContactsContract.Intents.Insert.SECONDARY_PHONE, homePhone)
            putExtra(ContactsContract.Intents.Insert.SECONDARY_PHONE_TYPE, ContactsContract.CommonDataKinds.Phone.TYPE_HOME)
            putExtra(ContactsContract.Intents.Insert.TERTIARY_PHONE, workPhone)
            putExtra(ContactsContract.Intents.Insert.TERTIARY_PHONE_TYPE, ContactsContract.CommonDataKinds.Phone.TYPE_WORK)

            putExtra(ContactsContract.Intents.Insert.IM_HANDLE, imHandle)
            putExtra(ContactsContract.Intents.Insert.IM_PROTOCOL, imProtocol)

            putExtra(ContactsContract.Intents.Insert.COMPANY, organization)
            putExtra(ContactsContract.Intents.Insert.JOB_TITLE, jobTitle)
            putExtra(ContactsContract.CommonDataKinds.Website.URL, website)
            putExtra(ContactsContract.Intents.Insert.NOTES, notes)
            putExtra(ContactsContract.CommonDataKinds.StructuredPostal.STREET, homeAddressStreetName)
            putExtra(ContactsContract.CommonDataKinds.StructuredPostal.CITY, homeLocality)
            putExtra(ContactsContract.CommonDataKinds.StructuredPostal.REGION, homeRegion)
            putExtra(ContactsContract.CommonDataKinds.StructuredPostal.POSTCODE, homePostalCode)
            putExtra(ContactsContract.CommonDataKinds.StructuredPostal.COUNTRY, homeCountry)
            putExtra(ContactsContract.CommonDataKinds.StructuredPostal.TYPE, ContactsContract.CommonDataKinds.StructuredPostal.TYPE_HOME)

            putExtra(ContactsContract.CommonDataKinds.Event.START_DATE, birthday)
            putExtra(ContactsContract.CommonDataKinds.Event.TYPE, ContactsContract.CommonDataKinds.Event.TYPE_BIRTHDAY)
        }.apply { 
            type = ContactsContract.RawContacts.CONTENT_TYPE
            putExtra(ContactsContract.CommonDataKinds.StructuredPostal.STREET, workAddressStreetName)
            putExtra(ContactsContract.CommonDataKinds.StructuredPostal.CITY, workLocality)
            putExtra(ContactsContract.CommonDataKinds.StructuredPostal.REGION, workRegion)
            putExtra(ContactsContract.CommonDataKinds.StructuredPostal.POSTCODE, workPostalCode)
            putExtra(ContactsContract.CommonDataKinds.StructuredPostal.COUNTRY, workCountry)
            putExtra(ContactsContract.CommonDataKinds.StructuredPostal.TYPE, ContactsContract.CommonDataKinds.StructuredPostal.TYPE_WORK)
            
            putExtra(ContactsContract.CommonDataKinds.Event.START_DATE, anniversary)
            putExtra(ContactsContract.CommonDataKinds.Event.TYPE, ContactsContract.CommonDataKinds.Event.TYPE_ANNIVERSARY)
        }
        startActivity(intent)

I'm using ContactsContract to save a lot of data to contacts (I didn't really expect the second .apply{} to work, but hey, I tried). When the activity is launched, the only fields that contain the info i put in them are: First Name, Middle Name, Last Name, Company, Title, Phone1-3 + their labels , email1 and 2 + their labels, and Notes.

This means i'm missing Prefix, Suffix, Nickname, IM handle and type, the entirety of home and work addresses, and both dates (birtdhay and anniversary). Of course, I frist tried with only the first .apply{}, but the result is the same. What am I doing wrong?

val intent = Intent(Intent.ACTION_INSERT, ContactsContract.Contacts.CONTENT_URI).apply {
            type = ContactsContract.RawContacts.CONTENT_TYPE
            putExtra(ContactsContract.Intents.Insert.NAME, fullName)
            putExtra(ContactsContract.CommonDataKinds.StructuredName.GIVEN_NAME, givenName)
            putExtra(ContactsContract.CommonDataKinds.StructuredName.FAMILY_NAME, familyName)
            putExtra(ContactsContract.CommonDataKinds.StructuredName.PREFIX, prefix)
            putExtra(ContactsContract.CommonDataKinds.StructuredName.SUFFIX, suffix)
            putExtra(ContactsContract.CommonDataKinds.Nickname.NAME, nickname)

            putExtra(ContactsContract.Intents.Insert.EMAIL, homeEmail)
            putExtra(ContactsContract.Intents.Insert.EMAIL_TYPE, ContactsContract.CommonDataKinds.Email.TYPE_HOME)
            putExtra(ContactsContract.Intents.Insert.SECONDARY_EMAIL, workEmail)
            putExtra(ContactsContract.Intents.Insert.SECONDARY_EMAIL_TYPE, ContactsContract.CommonDataKinds.Email.TYPE_WORK)

            putExtra(ContactsContract.Intents.Insert.PHONE, cellPhone)
            putExtra(ContactsContract.Intents.Insert.PHONE_TYPE, ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE)
            putExtra(ContactsContract.Intents.Insert.SECONDARY_PHONE, homePhone)
            putExtra(ContactsContract.Intents.Insert.SECONDARY_PHONE_TYPE, ContactsContract.CommonDataKinds.Phone.TYPE_HOME)
            putExtra(ContactsContract.Intents.Insert.TERTIARY_PHONE, workPhone)
            putExtra(ContactsContract.Intents.Insert.TERTIARY_PHONE_TYPE, ContactsContract.CommonDataKinds.Phone.TYPE_WORK)

            putExtra(ContactsContract.Intents.Insert.IM_HANDLE, imHandle)
            putExtra(ContactsContract.Intents.Insert.IM_PROTOCOL, imProtocol)

            putExtra(ContactsContract.Intents.Insert.COMPANY, organization)
            putExtra(ContactsContract.Intents.Insert.JOB_TITLE, jobTitle)
            putExtra(ContactsContract.CommonDataKinds.Website.URL, website)
            putExtra(ContactsContract.Intents.Insert.NOTES, notes)
            putExtra(ContactsContract.CommonDataKinds.StructuredPostal.STREET, homeAddressStreetName)
            putExtra(ContactsContract.CommonDataKinds.StructuredPostal.CITY, homeLocality)
            putExtra(ContactsContract.CommonDataKinds.StructuredPostal.REGION, homeRegion)
            putExtra(ContactsContract.CommonDataKinds.StructuredPostal.POSTCODE, homePostalCode)
            putExtra(ContactsContract.CommonDataKinds.StructuredPostal.COUNTRY, homeCountry)
            putExtra(ContactsContract.CommonDataKinds.StructuredPostal.TYPE, ContactsContract.CommonDataKinds.StructuredPostal.TYPE_HOME)

            putExtra(ContactsContract.CommonDataKinds.Event.START_DATE, birthday)
            putExtra(ContactsContract.CommonDataKinds.Event.TYPE, ContactsContract.CommonDataKinds.Event.TYPE_BIRTHDAY)
        }.apply { 
            type = ContactsContract.RawContacts.CONTENT_TYPE
            putExtra(ContactsContract.CommonDataKinds.StructuredPostal.STREET, workAddressStreetName)
            putExtra(ContactsContract.CommonDataKinds.StructuredPostal.CITY, workLocality)
            putExtra(ContactsContract.CommonDataKinds.StructuredPostal.REGION, workRegion)
            putExtra(ContactsContract.CommonDataKinds.StructuredPostal.POSTCODE, workPostalCode)
            putExtra(ContactsContract.CommonDataKinds.StructuredPostal.COUNTRY, workCountry)
            putExtra(ContactsContract.CommonDataKinds.StructuredPostal.TYPE, ContactsContract.CommonDataKinds.StructuredPostal.TYPE_WORK)
            
            putExtra(ContactsContract.CommonDataKinds.Event.START_DATE, anniversary)
            putExtra(ContactsContract.CommonDataKinds.Event.TYPE, ContactsContract.CommonDataKinds.Event.TYPE_ANNIVERSARY)
        }
        startActivity(intent)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

生生不灭 2025-02-12 20:32:56

您不能在 Contactscontract.commondatakinds.x 下使用 intent.action_insert

支持字段的列表在这里:https://developer.android.com/reference/android/provider/ContactsContract.Intents.Insert#constants_1

例如,可能会添加家庭地址:

putExtra(ContactsContract.Intents.Insert.POSTAL, "Contacts Lane 123, SomeCity, OM United States");
putExtra(ContactsContract.Intents.Insert.POSTAL_TYPE, StructuredPostal.TYPE_HOME);

但是请注意,您不能对此添加多个邮政地址。

Special 数据常数通过指定值和Mimetype来添加您想要的任何数据:

  ArrayList<ContentValues> data = new ArrayList<ContentValues>();

  ContentValues row1 = new ContentValues();
  row1.put(Data.MIMETYPE, Organization.CONTENT_ITEM_TYPE);
  row1.put(Organization.COMPANY, "Android");
  data.add(row1);

  // add more rows here if needed of any type

  intent.putParcelableArrayListExtra(Insert.DATA, data);

You can't use constants under ContactsContract.CommonDataKinds.X with Intent.ACTION_INSERT

The list of supported fields is here: https://developer.android.com/reference/android/provider/ContactsContract.Intents.Insert#constants_1

So for example home address might be added like this:

putExtra(ContactsContract.Intents.Insert.POSTAL, "Contacts Lane 123, SomeCity, OM United States");
putExtra(ContactsContract.Intents.Insert.POSTAL_TYPE, StructuredPostal.TYPE_HOME);

But note you can't add multiple postal addresses with this.

The special DATA constant is different, it allows you to add whatever data you want by specifying the value and mimetype:

  ArrayList<ContentValues> data = new ArrayList<ContentValues>();

  ContentValues row1 = new ContentValues();
  row1.put(Data.MIMETYPE, Organization.CONTENT_ITEM_TYPE);
  row1.put(Organization.COMPANY, "Android");
  data.add(row1);

  // add more rows here if needed of any type

  intent.putParcelableArrayListExtra(Insert.DATA, data);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文