Android 从联系人簿中保存了多个号码的联系人获取单个电话号码

Android 从联系人簿中保存了多个号码的联系人获取单个电话号码,android,android-contacts,Android,Android Contacts,我需要向用户询问联系电话才能拨打电话。点击按钮,用户应直接重定向至通讯录,用户可选择电话号码。下面是我现在使用的源代码 Button buttonReadContact; TextView textPhone; final int RQS_PICKCONTACT = 1; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setCon

我需要向用户询问联系电话才能拨打电话。点击按钮,用户应直接重定向至通讯录,用户可选择电话号码。下面是我现在使用的源代码

Button buttonReadContact;
TextView textPhone;
final int RQS_PICKCONTACT = 1;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    buttonReadContact = (Button)findViewById(R.id.readcontact);
    textPhone = (TextView)findViewById(R.id.phone);



    buttonReadContact.setOnClickListener(new View.OnClickListener(){

        @Override
        public void onClick(View arg0) {
            //Start activity to get contact
            final Uri uriContact = ContactsContract.Contacts.CONTENT_URI;
            Intent intentPickContact = new Intent(Intent.ACTION_PICK, uriContact);
            startActivityForResult(intentPickContact, RQS_PICKCONTACT);
        }});

}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    // TODO Auto-generated method stub
    if(resultCode == RESULT_OK){
        if(requestCode == RQS_PICKCONTACT){
            Uri returnUri = data.getData();
            Cursor cursor = getContentResolver().query(returnUri, null, null, null, null);

            if(cursor.moveToNext()){
                int columnIndex_ID = cursor.getColumnIndex(ContactsContract.Contacts._ID);
                String contactID = cursor.getString(columnIndex_ID);

                int columnIndex_HASPHONENUMBER = cursor.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER);
                String stringHasPhoneNumber = cursor.getString(columnIndex_HASPHONENUMBER);

                if(stringHasPhoneNumber.equalsIgnoreCase("1")){
                    Cursor cursorNum = getContentResolver().query(
                            ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
                            null,
                            ContactsContract.CommonDataKinds.Phone.CONTACT_ID + "=" + contactID,
                            null,
                            null);

                    //Get the first phone number
                    if(cursorNum.moveToNext()){
                        int columnIndex_number = cursorNum.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER);
                        String stringNumber = cursorNum.getString(columnIndex_number);
                        textPhone.setText(stringNumber);
                    }

                }else{
                    textPhone.setText("NO Phone Number");
                }


            }else{
                Toast.makeText(getApplicationContext(), "NO data!", Toast.LENGTH_LONG).show();
            }
        }
    }
}
但现在的问题是,我只能从保存了多个电话号码的联系人中选择一个号码


我需要在Skype应用程序中这样做。当用户选择具有多个联系人的联系人时,应要求用户从联系人簿中选择号码。请帮助我完成此操作。

我使用此代码打开联系人,允许用户选择单个联系人,然后解析结果以显示联系人姓名、电话号码和缩略图。在下面的示例中,已经定义了成员mName、mPhoneNumber和mContactImage

mButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
                // Start an activity to pick a single contact (ACTION_PICK)
                Intent intent = new Intent(Intent.ACTION_PICK, 
                        ContactsContract.Contacts.CONTENT_URI);
                // Show only contacts with phone numbers
                intent.setType(ContactsContract.CommonDataKinds.Phone.CONTENT_TYPE);
                // Start the Contacts activity
                startActivityForResult(intent, PICK_CONTACT);
        }
    });
在onActivityResult()中分析结果


我想这回答了你的问题。

对不起,我不明白你的问题,从多个电话号码中选择一个号码有什么问题?你能详细说明一下吗?现在,当我选择储存多个号码的联系人时,并不是问我需要选择哪个电话号码。这是skype应用程序中的第一个电话号码。我看到,当我们从通讯录中选择一个联系人时,它会显示一个弹出窗口,显示具有多个号码的联系人。从弹出窗口中,我们可以选择所需的号码。弹出窗口未从应用程序加载。但是从通讯录本身
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    switch (requestCode) {
        case PICK_CONTACT :
            if (resultCode == Activity.RESULT_OK) {
                Uri contactData = data.getData();
                String[] projection = {ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME,
                        ContactsContract.CommonDataKinds.Phone.NUMBER, ContactsContract.CommonDataKinds.Photo.PHOTO_THUMBNAIL_URI};
                Cursor c = getActivity().getContentResolver().query(contactData, projection, null, null, null);
                c.moveToFirst();
                int nameIdx = c.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME);
                int phoneNumberIdx = c.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER);
                int photoIdx = c.getColumnIndex(ContactsContract.CommonDataKinds.Photo.PHOTO_THUMBNAIL_URI);
                String name = c.getString(nameIdx);
                String phoneNumber = c.getString(phoneNumberIdx);
                String photo = c.getString(photoIdx);
                if (photo == null) {
                    // If no photo then substitute a dummy image
                    mContactImage.setImageResource(R.drawable.ic_contact_picture);
                } else {
                    // Display the contact photo
                    final Uri imageUri = Uri.parse(photo);
                    mContactImage.setImageURI(imageUri);
                }
                if (name == null) {
                    name = "No Name";
                }
                mName.setText(name);
                mPhoneNumber.setText(phoneNumber);
                c.close();

                // Now you have the phone number

            }
            break;
    }
}