联系人列表仅显示使用intent ContactsContract的一个电话号码

时间:2015-12-03 02:46:38

标签: android android-contacts phone-number

我正在尝试从联系人列表中获取电话号码。 我在全球范围内能够做到这一点,但我的联系人有多个电话号码有问题。

这是我的问题:

  • 在AVD(API21)上,联系人列表显示了我联系人的2部电话

enter image description here

  • 在我的真实手机(android 5.0.2 => API21)上,它只显示第一部手机。并非所有这些,就像在AVD上一样。

你知道为什么AVD和我的真实手机之间的行为不同吗?

以下是我如何调用意图:

    Intent contactIntent = new Intent(Intent.ACTION_PICK,  ContactsContract.Contacts.CONTENT_URI);                           
    contactIntent.setType(ContactsContract.CommonDataKinds.Phone.CONTENT_TYPE);
    startActivityForResult(contactIntent, PICK_CONTACT);

这是我的OnActivity代码:

public void onActivityResult(int reqCode, int resultCode, Intent data) {
        super.onActivityResult(reqCode, resultCode, data);


    //Field to fill with the selected phone number
    final EditText textPhone = (EditText) findViewById(R.id.Phone);

    if (data != null) {
        Uri uri = data.getData();

        if (uri != null){

            //Get the phone number id from the Uri
            String id = uri.getLastPathSegment();

            //Query the phone numbers for the selected phone number id
            Cursor c = getContentResolver().query(
                    ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,
                    ContactsContract.CommonDataKinds.Phone._ID + "=?",
                    new String[]{id}, null);

            int phoneIdx = c.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER);

            // get the only phone number
            if (c.moveToFirst()) {
                textPhone.setText(c.getString(phoneIdx));
            } else {
                //no result
                Toast noResultFound = Toast.makeText(SendLocationInfoActivity.this, "No phone number found", Toast.LENGTH_SHORT);
                noResultFound.show();
            }
            c.close();
        }
    }
}

1 个答案:

答案 0 :(得分:0)

通过使用ContactsContract.CommonDataKinds.Phone.CONTENT_URI,向用户显示联系人列表,每个电话号码一个条目。所选联系人保证有姓名和电话号码。

//Result code for contact picker
private static final int CONTACT_PICKER_RESULT = 1001;                

Intent contactPickerIntent = new Intent(Intent.ACTION_PICK,
    ContactsContract.CommonDataKinds.Phone.CONTENT_URI);
startActivityForResult(contactPickerIntent, CONTACT_PICKER_RESULT);

如果您想要所有联系人,无论他们是否有电话号码,请将ContactsContract.CommonDataKinds.Phone.CONTENT_URI替换为ContactsContract.Contacts.CONTENT_URI

这应该可以解决您的问题。