android - 从联系人选择器意图中获取人员的联系方式
问题描述
我正在尝试访问我从联系人选择器意图中选择的人的联系人姓名、电话号码和地址。
这是我用来打开联系人选择器 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(); }
但我无法获得存储的地址。
任何帮助表示赞赏。谢谢
解决方案
如果您没有READ_CONTACTS
权限,您将只能从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
权限才能使这些查询正常工作。
推荐阅读
- regex - 使用正则表达式在句子中查找标题大小写
- r - 如何计算高维回归统计
- python - Discord.py - 无限循环问题
- javascript - 从 file:// 运行 Svelte 应用程序,无需服务器
- python - 具有多个 StyledItemDelegateForColumn 的 QAbstractTableModel 和 QTableView 使我的应用程序崩溃
- algorithm - 如何找到边权重总和最大的最小路径?
- python - 如何从文本文件中随机隐藏单词
- r - 使用 R 中 2 个不同数据帧的列变量进行 T 测试
- angular - 如何在带有关键帧的动画项目中正确创建和构造?
- c++-cli - 如何在遍历GetProcessByName时使用for循环而不是foreach循环