【问题标题】:Fetching a Single Phone Number from a contact in Contacts Book which is having multiple numbers saved从联系人簿中保存多个号码的联系人获取单个电话号码
【发布时间】:2015-05-18 05:14:24
【问题描述】:

我需要向用户询问联系号码才能拨打电话。 On Button Click 用户应该被直接重定向到通讯录并且用户可以选择一个电话号码。以下是我现在使用的源代码。

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 应用程序中执行此操作。当用户选择一个有多个联系人的联系人时,它应该从联系人簿本身要求用户选择号码。请帮我做。

【问题讨论】:

  • 抱歉,没有收到您的问题,从多个电话号码中选择一个号码有什么问题?你能详细说明一下吗?
  • 现在,当我选择保存多个号码的联系人时,它不会询问我需要选择哪个电话号码。是直接取第一个电话号码
  • 在 Skype 应用程序中,我看到,当我们从通讯录中选择一个联系人时,它会显示一个包含多个号码的联系人的弹出窗口。从该弹出窗口中,我们可以选择我们需要的号码。弹出窗口不是从应用程序加载的。但从通讯录本身

标签: android android-contacts


【解决方案1】:

我使用此代码打开联系人并允许用户选择单个联系人,然后解析结果以显示联系人姓名、电话号码和缩略图。在下面的示例中,已经定义了成员 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() 中解析结果。

@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;
    }
}

我认为这回答了你的问题。

【讨论】:

    猜你喜欢
    • 2015-07-20
    • 1970-01-01
    • 2014-03-30
    • 2015-01-24
    • 2014-05-26
    • 1970-01-01
    • 2021-07-06
    • 2016-12-26
    • 1970-01-01
    相关资源
    最近更新 更多