android – 使用ContactsContract创建的新联系人不会出现在“联系人”应用中
作者:互联网
我正在使用以下代码来创建新联系人.它紧跟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);
}
我努力搜索但尚未找到答案.我找到了一个答案,表明问题可能与我的字符串“帐户类型”和“帐户名称”有关.就我而言,我不需要创建任何帐户.我想要的是添加一个新的联系人姓名,电子邮件/邮件地址,电话.
多谢你们!
解决方法:
Google提供的示例代码.只是当它在模拟器上运行时,找不到任何帐户或组来附加创建的联系人.默认情况下,此新创建的联系人不可见.
使用实际的手机(对于我的情况,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 来源: https://codeday.me/bug/20190926/1818531.html