我有一个应用程序,允许用户输入电话号码或从他们的联系人中选择一个。为此,我使用:
Intent intent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI);
//intent.setType(ContactsContract.CommonDataKinds.Phone.CONTENT_TYPE);
startActivityForResult(intent, PICK_CONTACT); //PICK_CONTACT is defined earlier as 1
这很好用,但它包括各种应用程序的联系人,如Facebook电子邮件等。如果我取消注释
//intent.setType(ContactsContract.CommonDataKinds.Phone.CONTENT_TYPE);
它仅显示您在“通讯录”应用中看到的联系人,但不会返回电话号码。有什么方法可以解决这个问题吗?
我有READ_CONTACTS权限。
阅读联系人的Uri的代码
@Override
public void onActivityResult(int reqCode, int resultCode, Intent data)
{
super.onActivityResult(reqCode, resultCode, data);
if(reqCode != PICK_CONTACT) return;
Cursor cur = getContentResolver().query(data.getData(), null,
null, null, null);
if (cur.getCount() <= 0) return;
while (cur.moveToNext())
{
String id = cur.getString(cur.getColumnIndex(ContactsContract.Contacts._ID));
if (Integer.parseInt(cur.getString(cur.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0)
{
// Query phone here. Covered next
Cursor phones = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,null,ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = "+ id,null, null);
while (phones.moveToNext())
//phone is the EditText view where the user enters a phone number
phone.setText(phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)));
phones.close();
}
}
}
答案 0 :(得分:0)
但它没有返回电话号码
如果您添加READ_CONTACTS
权限,则可以查询ContactsContract
,自行显示整个列表,或查询以获取用户通过{{1}选择的联系人的电话号码}。
如果没有ACTION_PICK
,您无权以任何方式访问联系电话号码,除非用户直接在您的应用中输入一个。