从联系人选择器意图中获取人员的联系方式
Posted
技术标签:
【中文标题】从联系人选择器意图中获取人员的联系方式【英文标题】:Get the contact details of a person from contact picker intent 【发布时间】:2019-07-08 04:50:01 【问题描述】:我正在尝试访问我从联系人选择器意图中选择的人的联系人姓名、电话号码和地址。 这是我用来打开联系人选择器 Intent 的代码:
这是我正在使用的代码:
Intent intent = new Intent(Intent.ACTION_PICK,
ContactsContract.Contacts.CONTENT_URI);
startActivityForResult(intent, PICK_CONTACT);
case PICK_CONTACT:
if (resultCode == Activity.RESULT_OK)
System.out.println("in on ActivityResult");
Uri contactData = data.getData();
Cursor c = getActivity().managedQuery(contactData, null,
null, null, null);
if (c.moveToFirst())
String id =
c.getString(c.getColumnIndexOrThrow(ContactsContract.Contacts._ID));StringhasPhone=c.getString(c.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER));
if (hasPhone.equalsIgnoreCase("1"))
Cursor phones getActivity().getContentResolver().query(ContactsContract.CommonDataKind s.Phone.CONTENT_URI,
null,
ContactsContract.CommonDataKinds.Phone.CONTACT_ID
+ " = " + id, null, null);
phones.moveToFirst();
String cNumber =
phones.getString(phones.getColumnIndex("data1"));String name phones.getString(phones.getColumnIndex(ContactsContract.Data.DISPLAY_NAME));
//here you can find out all the thing.
System.out.println("NAME:"+name);
Cursor postal_cursor=getActivity().getContentResolver().query(ContactsContract.Data.CONTENT_URI,
new String[]
ContactsContract.CommonDataKinds.StructuredPostal.STREET,
ContactsContract.CommonDataKinds.StructuredPostal.CITY,
ContactsContract.CommonDataKinds.StructuredPostal.FORMATTED_ADDRESS,
ContactsContract.Data.CONTACT_ID + "=? AND " +
ContactsContract.CommonDataKinds.StructuredPostal.MIMETYPE + "=?",
new String[]String.valueOf(id),
ContactsContract.CommonDataKinds.StructuredPostal.CONTENT_ITEM_TYPE,
null);
postal_cursor.moveToFirst();
while(postal_cursor.moveToNext())
String Strt =
postal_cursor.getString(postal_cursor.getColumnIndex(
ContactsContract.CommonDataKinds.StructuredPostal.STREET));
String Cty =
postal_cursor.getString(postal_cursor.getColumnIndex(
ContactsContract.CommonDataKinds.StructuredPostal.CITY));
String cntry =
postal_cursor.getString(postal_cursor.getColumnIndex(
ContactsContract.CommonDataKinds.StructuredPostal.COUNTRY));
String address =
postal_cursor.getString(postal_cursor.getColumnIndex(
ContactsContract.CommonDataKinds.StructuredPostal.FORMATTED_ADDRESS));
postal_cursor.close();
但我无法获取存储的地址。
感谢任何帮助。谢谢
【问题讨论】:
【参考方案1】:如果您没有READ_CONTACTS
permission,您将只能从Contacts.CONTENT_URI
表中获取信息,而不是电话或邮政地址等特定信息。
如果您想获取电话,可以使用特殊的电话选择器意图,例如:
Intent intent = new Intent(Intent.ACTION_PICK);
intent.setType(CommonDataKinds.Phone.CONTENT_TYPE);
startActivityForResult(intent, REQUEST_CODE);
或获取邮政地址:
Intent intent = new Intent(Intent.ACTION_PICK);
intent.setType(CommonDataKinds.StructuredPostal.CONTENT_TYPE);
startActivityForResult(intent, REQUEST_CODE);
请看这里:https://developer.android.com/guide/components/intents-common#PickContactDat
如果您想同时获取这两条信息,则需要向用户询问 READ_CONTACTS
permissions 以使这些查询起作用。
【讨论】:
感谢您的回复,我想从联系人选择器中获取姓名和地址。那么如何传递内容类型电话和结构化邮政的意图? 您可以根据自己的意图选择电话或邮政,不能同时选择两者。要获取名称,您可以使用电话或邮政光标的相同光标,例如Phone.CONTACT_NAME
我正在尝试使用电话,但没有从光标获取邮政地址
正如我所说,你不能让两者都使用相同的意图,除非你向用户请求 READ_CONTACTS 权限,然后你可以从 ContactsContract API 查询你想要的任何内容。如果您没有该权限,您只能临时获得一个选项来获取有关联系人的特定数据(电话或邮政,但不能两者兼而有之)以上是关于从联系人选择器意图中获取人员的联系方式的主要内容,如果未能解决你的问题,请参考以下文章