Android 联系人API将联系人存储为不可见联系人:如何使其可见?
我正在尝试使用Android 联系人API将联系人存储为不可见联系人:如何使其可见?,android,native,contacts,invisible,Android,Native,Contacts,Invisible,我正在尝试使用getContentResolver在Android中添加联系人。 首先,我创建了一个ArrayList: ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>(); 最后在一个试块中 getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops); 当我执行此操作时,我不会得
getContentResolver
在Android中添加联系人。
首先,我创建了一个ArrayList
:
ArrayList<ContentProviderOperation> ops =
new ArrayList<ContentProviderOperation>();
最后在一个试块中
getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops);
当我执行此操作时,我不会得到任何错误或异常。但是联系人不会出现在Android联系人中。当我检索不可见的联系人时,我可以找到此联系人。有人能找出哪里出了问题吗?ArrayList op_list=new ArrayList();
ArrayList<ContentProviderOperation> op_list = new ArrayList<ContentProviderOperation>();
op_list.add(ContentProviderOperation.newInsert(ContactsContract.RawContacts.CONTENT_URI)
.withValue(ContactsContract.RawContacts.ACCOUNT_TYPE, null)
.withValue(ContactsContract.RawContacts.ACCOUNT_NAME, null)
//.withValue(RawContacts.AGGREGATION_MODE, RawContacts.AGGREGATION_MODE_DEFAULT)
.build());
// first and last names
op_list.add(ContentProviderOperation.newInsert(Data.CONTENT_URI)
.withValueBackReference(Data.RAW_CONTACT_ID, 0)
.withValue(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE)
.withValue(StructuredName.GIVEN_NAME, name)
.withValue(StructuredName.FAMILY_NAME, name)
.build());
op_list.add(ContentProviderOperation.newInsert(Data.CONTENT_URI)
.withValueBackReference(Data.RAW_CONTACT_ID, 0)
.withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE)
.withValue(ContactsContract.CommonDataKinds.Phone.NUMBER, phone)
.withValue(ContactsContract.CommonDataKinds.Phone.TYPE, Phone.TYPE_MOBILE)
.build());
op_list.add(ContentProviderOperation.newInsert(Data.CONTENT_URI)
.withValueBackReference(Data.RAW_CONTACT_ID, 0)
.withValue(ContactsContract.Data.MIMETYPE,ContactsContract.CommonDataKinds.Email.CONTENT_ITEM_TYPE)
.withValue(ContactsContract.CommonDataKinds.Email.DATA, email)
.withValue(ContactsContract.CommonDataKinds.Email.TYPE, ContactsContract.CommonDataKinds.Email.TYPE_WORK)
.build());
try{
ContentProviderResult[] results = getContentResolver().
applyBatch(ContactsContract.AUTHORITY, op_list);
}catch(Exception e){
e.printStackTrace();
}
op_list.add(ContentProviderOperation.newInsert(ContactsContract.RawContacts.CONTENT_URI)
.withValue(contacts contract.raw contacts.ACCOUNT_TYPE,null)
.withValue(contacts contract.raw contacts.ACCOUNT\u NAME,null)
//.withValue(RawContacts.AGGREGATION\u模式,RawContacts.AGGREGATION\u模式默认)
.build());
//姓名
op_list.add(ContentProviderOperation.newInsert(Data.CONTENT_URI)
.带ValueBackReference(Data.RAW\u CONTACT\u ID,0)
.withValue(Data.MIMETYPE、StructuredName.CONTENT\u ITEM\u TYPE)
.withValue(StructuredName.GIVEN_NAME,NAME)
.withValue(StructuredName.FAMILY_NAME,NAME)
.build());
op_list.add(ContentProviderOperation.newInsert(Data.CONTENT_URI)
.带ValueBackReference(Data.RAW\u CONTACT\u ID,0)
.withValue(contacts contract.Data.MIMETYPE、contacts contract.commondatatypes.Phone.CONTENT\u ITEM\u TYPE)
.带值(contacts contract.commondatacates.Phone.NUMBER,Phone)
.带值(contacts contract.commondatatypes.Phone.TYPE,Phone.TYPE\u MOBILE)
.build());
op_list.add(ContentProviderOperation.newInsert(Data.CONTENT_URI)
.带ValueBackReference(Data.RAW\u CONTACT\u ID,0)
.withValue(ContactsContact.Data.MIMETYPE、ContactsContact.CommonDataTypes.Email.CONTENT\u ITEM\u TYPE)
.withValue(contacts contract.commondatatypes.Email.DATA,Email)
.withValue(contacts contract.commondatatypes.Email.TYPE,contacts contract.commondatatypes.Email.TYPE\u WORK)
.build());
试一试{
ContentProviderResult[]结果=getContentResolver()。
applyBatch(Contacts Contract.AUTHORITY,op_list);
}捕获(例外e){
e、 printStackTrace();
}
这个代码有效 可能是个愚蠢的问题,但在电话设置中,你是否只显示带有号码的联系人。我想补充的另一件事是,有些电话允许你选择只显示属于某些谷歌群组(无论你设置哪个群组)的联系人。如果一个新的联系人不是其中一个小组的成员,你就不会见到他。检查你的GMail账户,看看联系人是否正确同步到了那里。伙计,你怎么这么讨厌。我不是想当个混蛋什么的。我只是对你得到的那件简单的事情感到好奇,你似乎对它感到不安。我说我没有答案。你说过让联系人可见与此无关。我误解了你在那里说的话,意思是没有办法做到这一点。毕竟没有愚蠢的问题,看看你怎么说没有明显的错误,当你的隐形联系人列表被检索出来时,我听起来像是对问题的简单解释。@Adhavan LOL我看到问题了@Terrance说他问你的问题可能会被认为是“愚蠢的”。他不是说你的问题是愚蠢的!他很谦虚,不是粗鲁。@威尔,@Terrance:对不起!我想我误解了!这不管用。null作为帐户类型和名称在某些电话上不起作用。要使每部电话都起作用,您需要有帐户类型和帐户名称。一种可能的方法是让用户选择要将联系人添加到哪个帐户。(将选项另存为资源并重新使用)我可以插入联系人。但是设置联系人铃声的问题。我如何才能做到这一点呢?很好的工作,只有这段代码在经过长时间的RND后才对我有效。
ArrayList<ContentProviderOperation> op_list = new ArrayList<ContentProviderOperation>();
op_list.add(ContentProviderOperation.newInsert(ContactsContract.RawContacts.CONTENT_URI)
.withValue(ContactsContract.RawContacts.ACCOUNT_TYPE, null)
.withValue(ContactsContract.RawContacts.ACCOUNT_NAME, null)
//.withValue(RawContacts.AGGREGATION_MODE, RawContacts.AGGREGATION_MODE_DEFAULT)
.build());
// first and last names
op_list.add(ContentProviderOperation.newInsert(Data.CONTENT_URI)
.withValueBackReference(Data.RAW_CONTACT_ID, 0)
.withValue(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE)
.withValue(StructuredName.GIVEN_NAME, name)
.withValue(StructuredName.FAMILY_NAME, name)
.build());
op_list.add(ContentProviderOperation.newInsert(Data.CONTENT_URI)
.withValueBackReference(Data.RAW_CONTACT_ID, 0)
.withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE)
.withValue(ContactsContract.CommonDataKinds.Phone.NUMBER, phone)
.withValue(ContactsContract.CommonDataKinds.Phone.TYPE, Phone.TYPE_MOBILE)
.build());
op_list.add(ContentProviderOperation.newInsert(Data.CONTENT_URI)
.withValueBackReference(Data.RAW_CONTACT_ID, 0)
.withValue(ContactsContract.Data.MIMETYPE,ContactsContract.CommonDataKinds.Email.CONTENT_ITEM_TYPE)
.withValue(ContactsContract.CommonDataKinds.Email.DATA, email)
.withValue(ContactsContract.CommonDataKinds.Email.TYPE, ContactsContract.CommonDataKinds.Email.TYPE_WORK)
.build());
try{
ContentProviderResult[] results = getContentResolver().
applyBatch(ContactsContract.AUTHORITY, op_list);
}catch(Exception e){
e.printStackTrace();
}