【发布时间】:2011-03-21 03:28:25
【问题描述】:
我正在使用以下代码来创建新联系人。它紧跟 Android 提供的 ContactManager 示例。 问题是,创建的联系人不会出现在 Android 随附的联系人应用程序中。然而,当我从电话簿中加载所有联系人时,我可以看到新创建的联系人。
private void insertPBEntry() 抛出 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);
}
我已经努力寻找,但还没有找到答案。我发现一个答案表明问题可能与我的字符串“帐户类型”和“帐户名称”有关。就我而言,我不需要创建任何帐户。我想要的只是添加一个带有姓名、电子邮件/邮件地址、电话的新联系人。
谢谢各位!
【问题讨论】:
-
所有联系人都必须插入到一个帐户下。进一步调查。
-
经过进一步调查,我发现:osdir.com/ml/Android-Developers/2010-05/msg03859.html 因此,使用上述代码创建的那些联系人未显示可能是因为他们对已打开可见性的组的时间不长。因此,一切都归结为在使用其界面时查找在联系人应用程序中创建的那些联系人的组 ID。我试图从 ContactsContracts.Groups 获取所有组并获得零组。同样,从 GroupMembership 获取数据返回零组成员资格。有趣的!让我们看看如何......