gpt4 book ai didi

android - 使用 ContactsContract 创建的新联系人不会出现在联系人应用程序中

转载 作者:太空狗 更新时间:2023-10-29 15:37:30 24 4
gpt4 key购买 nike

我正在使用以下代码创建一个新联系人。它紧跟 Android 提供的 ContactManager 示例。问题是,创建的联系人不会出现在 Android 附带的联系人应用程序中。然而,当我从电话簿中加载所有联系人时,我可以看到新创建的联系人。

私有(private)无效插入PBEntry() 抛出 RemoteException、OperationApplicationException {

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

ops.add(ContentProviderOperation.newInsert(ContactsContract.RawContacts.CONTENT_URI)
.withValue(ContactsContract.RawContacts.ACCOUNT_TYPE, "Account type")
.withValue(ContactsContract.RawContacts.ACCOUNT_NAME, "Account name")
.build());

ops.add(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.DISPLAY_NAME, "TOTAL_NEW")
.build());
ops.add(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, "9090")
.withValue(ContactsContract.CommonDataKinds.Phone.TYPE,Phone.TYPE_MOBILE)
.build());
getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops);

}

我一直在努力寻找,但还没有找到答案。我发现一个答案表明问题可能与我的字符串“帐户类型”和“帐户名称”有关。就我而言,我不需要创建任何帐户。我只想添加一个新联系人,包括姓名、电子邮件/邮件地址、电话。

谢谢大家!

最佳答案

Google 提供的示例代码有效。只是在模拟器上运行时,找不到任何账号或群组来绑定(bind)创建的联系人。默认情况下,这个新创建的联系人是不可见的。

使用实际手机(对于我来说是 HTC Dream),在检测到帐户名称和类型以输入代码后,它就可以工作了。或者,我们可以获得可用的可见组 ID,并将新联系人附加到其中一个组。

获取可用帐户:

//accounts
Account[] accounts = AccountManager.get(act).getAccounts();
for (Account acc : accounts){
Log.d(TAG, "account name = " + acc.name + ", type = " + acc.type);
}

获取组列表:

//group membership info
String[] tempFields = new String[] {
GroupMembership.GROUP_ROW_ID, GroupMembership.GROUP_SOURCE_ID};
Cursor tempCur = act.managedQuery(Data.CONTENT_URI, tempFields,
Data.MIMETYPE + "='" + GroupMembership.CONTENT_ITEM_TYPE + "'",
null, null);

现在,如果我们想将新联系人关联到一个组而不是一个帐户:

ops.add(ContentProviderOperation.newInsert(Data.CONTENT_URI)
.withValueBackReference(Data.RAW_CONTACT_ID, 0)
.withValue(ContactsContract.Data.MIMETYPE, GroupMembership.CONTENT_ITEM_TYPE)
.withValue(GroupMembership.GROUP_SOURCE_ID, *<THE_IDENTIFIED_GROUP_ID>*)
.build());

希望对您有所帮助。

关于android - 使用 ContactsContract 创建的新联系人不会出现在联系人应用程序中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3336019/

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