gpt4 book ai didi

android - 使用 ContactsContract 有效地添加联系人

转载 作者:行者123 更新时间:2023-11-29 02:16:29 27 4
gpt4 key购买 nike

我可以使用 ContactsContract 添加联系人到用户的一个帐户(这本身就是一项艰巨的任务!),但我仍然无法将其添加到将显示的组中。我知道用户可以转到他们的联系人选项并选中他们帐户中的“显示所有(其他)联系人”框,但这不仅是用户的一个额外步骤,他们中的许多人都不知道,我在 HTC EVO 上试过,我不确定 Sense 是否可行。

所以至少,我正在寻找一个与 addToMyContactsGroup 等效的 ContactsContract。在更广泛的层面上,我正在寻找以下方面的更多详细信息:

  • 如何最好地将联系人添加到组中,具体取决于他们选择将联系人添加到的帐户。
  • 如果用户多次按下我的“添加到联系人”按钮,如何避免为同一个人堆叠多个 Raw Contacts(当您编辑联系人时,所有 Raw Contacts 都是可见的,并且可以在 Android 中单独编辑)。
  • 基本上,如何在不使用 Intents.Insert
  • 的情况下尽可能方便地添加联系人

谢谢高手!

最佳答案

我不确定这些组,但这是我用于其余部分的:

(阅读底部以获得解释)

声明:

static ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();

Action 代码:

ops.addAll(fillContentProviderOperation(accounts, ctaList,
ops));


private ArrayList<ContentProviderOperation> fillContentProviderOperation(
Account[] accounts, ArrayList<ContactToAdd> ctaList,
ArrayList<ContentProviderOperation> privateOps) //
{
for (int i = 0; i < ctaList.size(); i++) //
{
if (ctaList.get(i) != null) //
{
if (ctaList.get(i).LastName != ""
&& ctaList.get(i).LastName != null) //
{
privateOps.addAll(addToContacts(ctaList.get(i),
privateOps.size(), accounts,
ctaList.get(i).groupType));

publishProgress();
}
}

}
return privateOps;
}

填充代码:

protected ArrayList<ContentProviderOperation> addToContacts(
ContactToAdd cta, int opsLength, Account[] accounts, String groupName) //
{

ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();

ops.add(ContentProviderOperation.newInsert(RawContacts.CONTENT_URI)
.withValue(RawContacts.ACCOUNT_TYPE, accounts[0].type)
.withValue(RawContacts.ACCOUNT_NAME, accounts[0].name).build());

ops.add(ContentProviderOperation.newInsert(Data.CONTENT_URI)
.withValueBackReference(Data.RAW_CONTACT_ID, opsLength)
.withValue(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE)
.withValue(StructuredName.GIVEN_NAME, cta.FirstName)
.withValue(StructuredName.FAMILY_NAME, cta.LastName).build());

ops.add(ContentProviderOperation.newInsert(Data.CONTENT_URI)
.withValueBackReference(Data.RAW_CONTACT_ID, opsLength)
.withValue(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE)
.withValue(Phone.NUMBER, cta.DayWorkPhoneNumber.PhoneNumber)
.withValue(Phone.TYPE, Phone.TYPE_MOBILE).build());

ops.add(ContentProviderOperation.newInsert(Data.CONTENT_URI)
.withValueBackReference(Data.RAW_CONTACT_ID, opsLength)
.withValue(Data.MIMETYPE, Email.CONTENT_ITEM_TYPE)
.withValue(Email.DATA1, cta.Email)
.withValue(Email.TYPE, Email.TYPE_MOBILE).build());

ops.add(ContentProviderOperation
.newInsert(Data.CONTENT_URI)
.withValueBackReference(Data.RAW_CONTACT_ID, opsLength)
.withValue(Data.MIMETYPE, StructuredPostal.CONTENT_ITEM_TYPE)
.withValue(StructuredPostal.STREET, cta.MailingAddress.Address1)
.withValue(StructuredPostal.CITY, cta.MailingAddress.City)
.withValue(StructuredPostal.REGION,
cta.MailingAddress.StateCode)
.withValue(StructuredPostal.POSTCODE,
cta.MailingAddress.PostalCode)
.withValue(StructuredPostal.TYPE, StructuredPostal.TYPE_HOME)
.build());

ops.add(ContentProviderOperation
.newInsert(Data.CONTENT_URI)
.withValueBackReference(Data.RAW_CONTACT_ID, opsLength)
.withValue(Data.MIMETYPE, StructuredPostal.CONTENT_ITEM_TYPE)
.withValue(StructuredPostal.STREET,
cta.ShippingAddress.Address1)
.withValue(StructuredPostal.CITY, cta.ShippingAddress.City)
.withValue(StructuredPostal.REGION,
cta.ShippingAddress.StateCode)
.withValue(StructuredPostal.POSTCODE,
cta.ShippingAddress.PostalCode)
.withValue(StructuredPostal.TYPE, StructuredPostal.TYPE_WORK)
.build());

return ops;
}

这段代码基本上用几个值填充了一个大型 ArrayList 操作,以插入到联系人数据库中。

您需要确保使用 .withValueBackReference(opsLength) 以便将 BACK 指向正确的原始联系人。

此代码已经过测试,可在运行 2.2 的 HTC Incredible 上运行。

祝你好运!

关于android - 使用 ContactsContract 有效地添加联系人,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3357648/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com