- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
在查询联系人数据时,我的大部分工作都正常进行。我正在与 StructuredName 和 Organization 作斗争。它们对我不起作用。
如果您不介意,请查看代码。它是手工制作的,删除了许多错误检查,以使其尽可能小,以便在此处发布。 “不起作用”的评论是对我不起作用的部分。
两个前导 if() 是 onActivityResult 的一部分,我在联系人选择结束时在其中接收数据。调用完成:
intent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI);
startActivityForResult(intent, Main.DIALOG_PICKCONTACT);
非常感谢黄家卫
if (requestCode == Main.DIALOG_PICKCONTACT) {
if (resultCode == RESULT_OK) {
int i;
String s;
Cursor cursorContacts = managedQuery(intent.getData(),
null,
null,
null,
null);
if (cursorContacts != null) {
if (cursorContacts.moveToNext()) {
ContentResolver contentResolver = getContentResolver();
String contactId = cursorContacts.getString(cursorContacts.getColumnIndex(ContactsContract.Contacts._ID));
i = cursorContacts.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME);
// cursorContacts.getString(i); *** is DISPLAY_NAME
Cursor cursorEmail = contentResolver.query(
ContactsContract.CommonDataKinds.Email.CONTENT_URI,
null,
ContactsContract.CommonDataKinds.Email.CONTACT_ID + " = ?",
new String[] { contactId },
null);
if (cursorEmail != null) {
while (cursorEmail.moveToNext()) {
int type = cursorEmail.getInt(cursorEmail.getColumnIndex(ContactsContract.CommonDataKinds.Email.TYPE));
s = cursorEmail.getString(cursorEmail.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA));
switch (type) {
case ContactsContract.CommonDataKinds.Email.TYPE_HOME:
// s *** is private Email
break;
case ContactsContract.CommonDataKinds.Email.TYPE_WORK:
// s *** is business Email
break;
}
}
cursorEmail.close();
}
Cursor cursorOrganization = contentResolver.query(
ContactsContract.Data.CONTENT_URI,
null,
ContactsContract.CommonDataKinds.Organization.CONTACT_ID + " = ?",
new String[] { contactId },
null);
if (cursorOrganization != null) {
if (cursorOrganization.moveToNext()) {
s = cursorOrganization.getString(cursorOrganization.getColumnIndex(ContactsContract.CommonDataKinds.Organization.DATA));
// s *** Company name not working
s = cursorOrganization.getString(cursorOrganization.getColumnIndex(ContactsContract.CommonDataKinds.Organization.TITLE));
// s *** Function within company not working
}
cursorOrganization.close();
}
s = cursorContacts.getString(cursorContacts.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER));
if (Integer.parseInt(s) > 0) {
Cursor cursorPhone = contentResolver.query(
ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
null,
ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = ?",
new String[] { contactId },
null);
if (cursorPhone != null) {
while (cursorPhone.moveToNext()) {
int type = cursorPhone.getInt(cursorPhone.getColumnIndex(ContactsContract.CommonDataKinds.Phone.TYPE));
s = cursorPhone.getString(cursorPhone.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
switch (type) {
case ContactsContract.CommonDataKinds.Phone.TYPE_FAX_HOME:
// s *** is private fax
break;
case ContactsContract.CommonDataKinds.Phone.TYPE_FAX_WORK:
// s *** is business fax
break;
case ContactsContract.CommonDataKinds.Phone.TYPE_HOME:
// s *** is private phone
break;
case ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE:
// s *** is mobile phone
break;
case ContactsContract.CommonDataKinds.Phone.TYPE_WORK:
// s *** is business phone
break;
case ContactsContract.CommonDataKinds.Phone.TYPE_WORK_MOBILE:
// s *** is business mobile
break;
}
}
cursorPhone.close();
}
}
Cursor cursorStructuredName = contentResolver.query(
ContactsContract.Data.CONTENT_URI,
null,
ContactsContract.CommonDataKinds.StructuredName.CONTACT_ID + " = ?",
new String[] { contactId },
null);
if (cursorStructuredName != null) {
if (cursorStructuredName.moveToNext()) {
i = cursorStructuredName.getColumnIndex(ContactsContract.CommonDataKinds.StructuredName.GIVEN_NAME);
// cursorStructuredName.getString(i); *** given name not working
i = cursorStructuredName.getColumnIndex(ContactsContract.CommonDataKinds.StructuredName.MIDDLE_NAME);
// cursorStructuredName.getString(i); *** middle name not working
i = cursorStructuredName.getColumnIndex(ContactsContract.CommonDataKinds.StructuredName.PREFIX);
// cursorStructuredName.getString(i); *** prefix not working
i = cursorStructuredName.getColumnIndex(ContactsContract.CommonDataKinds.StructuredName.SUFFIX);
// cursorStructuredName.getString(i); *** suffix not working
}
cursorStructuredName.close();
}
Cursor cursorStructuredPostal = contentResolver.query(
ContactsContract.CommonDataKinds.StructuredPostal.CONTENT_URI,
null,
ContactsContract.CommonDataKinds.StructuredPostal.CONTACT_ID + " = ?",
new String[] { contactId },
null);
if (cursorStructuredPostal != null) {
while (cursorStructuredPostal.moveToNext()) {
int type = cursorStructuredPostal.getInt(cursorStructuredPostal.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.TYPE));
s = cursorStructuredPostal.getString(cursorStructuredPostal.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.COUNTRY));
switch (type) {
case ContactsContract.CommonDataKinds.StructuredPostal.TYPE_HOME:
//s *** is private country
break;
case ContactsContract.CommonDataKinds.StructuredPostal.TYPE_WORK:
// s *** is business country
break;
}
s = cursorStructuredPostal.getString(cursorStructuredPostal.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.CITY));
switch (type) {
case ContactsContract.CommonDataKinds.StructuredPostal.TYPE_HOME:
// s *** is private city
break;
case ContactsContract.CommonDataKinds.StructuredPostal.TYPE_WORK:
// s *** is business city
break;
}
s = cursorStructuredPostal.getString(cursorStructuredPostal.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.POSTCODE));
switch (type) {
case ContactsContract.CommonDataKinds.StructuredPostal.TYPE_HOME:
// s *** is private postcode
break;
case ContactsContract.CommonDataKinds.StructuredPostal.TYPE_WORK:
// s *** is business postcode
break;
}
s = cursorStructuredPostal.getString(cursorStructuredPostal.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.STREET));
switch (type) {
case ContactsContract.CommonDataKinds.StructuredPostal.TYPE_HOME:
// s *** is private street
break;
case ContactsContract.CommonDataKinds.StructuredPostal.TYPE_WORK:
// s *** is business street
break;
}
}
cursorStructuredPostal.close();
}
Cursor cursorWebsite = contentResolver.query(
ContactsContract.Data.CONTENT_URI,
null,
ContactsContract.CommonDataKinds.Website.CONTACT_ID + " = ?",
new String[] { contactId },
null);
if (cursorWebsite != null) {
while (cursorWebsite.moveToNext()) {
i = cursorWebsite.getColumnIndex(ContactsContract.CommonDataKinds.Website.URL);
int type = cursorWebsite.getColumnIndex(ContactsContract.CommonDataKinds.Website.CONTENT_ITEM_TYPE);
s = cursorWebsite.getString(i);
switch (type) {
case ContactsContract.CommonDataKinds.Website.TYPE_HOME:
// s *** private url not working
break;
case ContactsContract.CommonDataKinds.Website.TYPE_WORK:
// s *** business url not working
break;
}
}
cursorWebsite.close();
}
}
cursorContacts.close();
}
}
}
最佳答案
你的where条件是错误的。
将其用于结构化名称:
// projection
String[] projection = new String[] {ContactsContract.CommonDataKinds.StructuredName.FAMILY_NAME, ContactsContract.CommonDataKinds.StructuredName.GIVEN_NAME, ContactsContract.CommonDataKinds.StructuredName.MIDDLE_NAME};
String where = ContactsContract.Data.RAW_CONTACT_ID + " = ? AND " + ContactsContract.Data.MIMETYPE + " = ?";
String[] whereParameters = new String[]{this.contact_id, ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE};
//Request
Cursor contacts = this.resolver.query(ContactsContract.Data.CONTENT_URI, projection, where, whereParameters, null);
//Iteration
if (contacts.moveToFirst()) {
//code here
}
contacts.close();
关于android - ContactsContract.CommonDataKinds.StructuredName 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4366746/
在how to retrieve the list of contacts in android我看到代码允许您使用 ContactsContract.CommonDataKinds.Phone.CO
我可以使用下面的查询选择所有联系人 cr = mActivity.getContentResolver(); String selection = ContactsContract.C
我试图将隐式意图发送给我的联系人应用程序,以供用户选择联系人。然后,我的应用程序将提取该联系人的姓名和电话号码,以便在该应用程序中使用。 (注意:我在BigNerdRanch的Android书籍的第2
任何人都可以帮助我在地址簿中添加新联系人并使用新的 ContactsContract API 批量应用它们吗?我找不到合适的教程。 我可以添加一个联系人。但是批量更新失败,添加了未知联系人。 目前我在
我想把我手机里的所有联系人放到一个数组中。我正在使用下面的代码,但将它们全部放入数组需要 3-4 秒。为了加快这个过程,我只收集那些有电话号码的联系人。这会产生一个包含 163 个元素的数组。 fin
我正在通过查询联系人 private Cursor cursor; private static final String SORT_ORDER = ContactsContract.Contacts
ContactsContract.Contacts 默认是空的吗?如果是这样,我如何向其中添加一些测试数据? 否则,我一定是做错了什么/遗漏了什么,因为这个 Activity 显示完全是空的。 pub
很抱歉,如果这可能是一个重复的问题,我整个晚上都在努力解决这个问题,而且我似乎找不到其他可能对此有所启发的帖子,所以我希望多几双眼睛可能会发现一些东西。 我对 ContactsContract.Dat
在我的应用程序中,我想调用联系人编辑器以允许用户添加新联系人。我想找到一种方法让应用程序将要使用的帐户传递给编辑器。如何做到这一点? 我还没有找到任何关于如何执行此操作的文档。我确实在 github
我想获取本地联系人的电话号码,但是有问题。例如,如果我选择 A,那么显示的号码是 B 的。这是代码。 //the button_click public void testM(View v) {
我尝试使用获取联系人 ID 和图片 URI 的函数更新 ContactsContract 中的照片,但它似乎不起作用(我的函数返回 true)。 我真的不明白,因为代码看起来不错。 当联系人已经有照片
是否可以对 ContactsContract 进行一次查询以获取一组与显示名称、电话号码或电子邮件地址匹配的联系人? 这本质上是联系人和数据“表”的连接(在引号中,因为它们只是通过界面看起来像表,但可
是否有一个有效的查询来查找特定帐户名称和类型的所有聚合联系人? ContactsContract.Contacts 表有 IN_VISIBLE_GROUP 列,它对联系人组成员身份有效。因此,如果用户
除了 android 站点上的简短文章:- http://developer.android.com/resources/articles/contacts.html 我还没有看到任何关于使用新的 C
我们如何使用隐式连接通过 ContactsContract API 获取 displayname 和 organization.data,以便我可以在一个游标中同时获取这两个值? 最佳答案 您可以使用
我正在使用 ContactsContract 通过将用户发送到“新联系人” Intent 来插入新联系人。我使用的代码是: Intent i = new Intent(Intent.ACTION_IN
我可以使用 ContactsContract 添加联系人到用户的一个帐户(这本身就是一项艰巨的任务!),但我仍然无法将其添加到将显示的组中。我知道用户可以转到他们的联系人选项并选中他们帐户中的“显示所
我试图从 ContactsContract 获取电子邮件地址,但我只得到一个空字符串!姓名和电话号码可以正常使用,但电子邮件地址不行! 我很困惑,几天来一直在尝试解决这个问题,但我不知道出了什么问题,
我正在尝试在 ContactsContract 中创建一个用户配置文件...因为没有,我需要一个用于测试。我没有真实的 Android 设备,只有用于测试的 AVD 模拟器。 这是我正在使用的代码块:
我需要创建一个包含在设备上找到的所有电话号码的列表。所以我所做的是查询 ContactsContract.Data.CONTENT_URI,如下所示: Uri uri = Da
我是一名优秀的程序员,十分优秀!