仅从本地联系人获取Android联系人

时间:2013-11-30 00:14:05

标签: android android-contacts

我有一个应用程序,允许用户输入电话号码或从他们的联系人中选择一个。为此,我使用:

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(); 
        }

    }

}

1 个答案:

答案 0 :(得分:0)

  

但它没有返回电话号码

如果您添加READ_CONTACTS权限,则可以查询ContactsContract,自行显示整个列表,或查询以获取用户通过{{1}选择的联系人的电话号码}。

如果没有ACTION_PICK,您无权以任何方式访问联系电话号码,除非用户直接在您的应用中输入一个。