Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 联系人列表仅显示使用意向联系人合同的一个电话号码_Android_Android Contacts_Phone Number - Fatal编程技术网

Android 联系人列表仅显示使用意向联系人合同的一个电话号码

Android 联系人列表仅显示使用意向联系人合同的一个电话号码,android,android-contacts,phone-number,Android,Android Contacts,Phone Number,我正在尝试从联系人列表中获取电话号码。 我可以在全球范围内做到这一点,但我有一个问题,联系人有多个电话号码 我的问题是: 在AVD(API21)上,联系人列表很好地显示了我联系人的两部电话 在我的真实手机上(android 5.0.2=>API21),它只显示第一部手机。不是所有的,因为它是在AVD上 你知道为什么AVD和我的真实手机的行为不同吗 以下是我对意图的称呼: Intent contactIntent = new Intent(Intent.ACTION_PICK,

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

我的问题是:

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

  • 在我的真实手机上(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();
        }
    }
}

通过使用ContactsContract.CommonDataTypes.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.commondatatypes.phone.CONTENT\u URI
替换为
ContactsContract.contacts.CONTENT\u URI


这将解决您的问题

请不要建议将显示联系人列表作为解决方法,并在我单击具有多部电话的联系人时显示对话框列表。我试过了,效果不错,但使用这种方法,联系人列表也会显示所有没有电话号码的联系人。也就是说,这些联系人显示在AVD中,但不显示在设备中。我说的对吗?实际上AVD显示contact+所有电话,而real device仅显示contact+第一部电话。