【问题标题】:All phone numbers of one contact for startActivityForResultstartActivityForResult 的一位联系人的所有电话号码
【发布时间】:2011-07-29 13:49:41
【问题描述】:

一个联系人可能有很多电话号码(手机、家庭、..)。我想让用户选择一个特定联系人的电话号码。

通过这个 sn-p,我可以得到每个联系人的所有电话号码列表。

Intent intent = new Intent(Intent.ACTION_PICK, 
    ContactsContract.CommonDataKinds.Phone.CONTENT_URI);
startActivityForResult(intent, PHONE_NUMBER_PICKED);

如何只列出一个联系人的电话号码?

编辑:我知道如何获取联系人的所有电话号码,这不是重点。我可以将所有电话号码放在一个列表视图中并让用户选择一个。但是这个功能是存在的(上面提到过),我只是不想要所有的号码,而只想要一个联系人的电话号码。

【问题讨论】:

  • 请具体说明您的问题。在您的“编辑”中,您自相矛盾。你能告诉我“一个联系人的所有电话号码”和“一个联系人的电话号码”的区别是什么吗?
  • 抱歉,如果不清楚。两者对我来说都是一样的。我想过滤由 ContactsContract.CommonDataKinds.Phone.CONTENT_URI 给出的列表,以便显示的列表仅包含附加到给定联系人的电话号码。

标签: android


【解决方案1】:

如果您想获取与联系人相关的所有电话号码,则:

1) 使用此意图打开联系人应用程序:

 Intent intent = new Intent(Intent.ACTION_PICK);
    intent.setType(ContactsContract.Contacts.CONTENT_TYPE);
    startActivityForResult(intent, PICK_CONTACT);

2) 在onActivityResult 中使用以下代码:

if (requestCode == PICK_CONTACT) {
            if (resultCode == Activity.RESULT_OK) {
                if (data != null) {
                    Uri contactData = data.getData();

                    try {

                        String id = contactData.getLastPathSegment();
                        Cursor phoneCur = getContentResolver()
                                .query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
                                        null,
                                        ContactsContract.CommonDataKinds.Phone.CONTACT_ID
                                                + " = ?", new String[] { id },
                                        null);

                        final ArrayList<String> phonesList = new ArrayList<String>();
                        while (phoneCur.moveToNext()) {
                            // This would allow you get several phone addresses
                            // if the phone addresses were stored in an array
                            String phone = phoneCur
                                    .getString(phoneCur
                                            .getColumnIndex(ContactsContract.CommonDataKinds.Phone.DATA));
                            phonesList.add(phone);
                        }
                        phoneCur.close();

                        if (phonesList.size() == 0) {
                            Helper.showToast(
                                    this,
                                    getString(R.string.error_no_phone_no_in_contact),
                                    Toast.LENGTH_LONG);
                        } else if (phonesList.size() == 1) {
                            editText.setText(phonesList.get(0));
                        } else {

                            final String[] phonesArr = new String[phonesList
                                    .size()];
                            for (int i = 0; i < phonesList.size(); i++) {
                                phonesArr[i] = phonesList.get(i);
                            }

                            AlertDialog.Builder dialog = new AlertDialog.Builder(
                                    SendSMS.this);
                            dialog.setTitle(R.string.choose_phone);
                            ((Builder) dialog).setItems(phonesArr,
                                    new DialogInterface.OnClickListener() {
                                        public void onClick(
                                                DialogInterface dialog,
                                                int which) {
                                            String selectedEmail = phonesArr[which];
                                            editText.setText(selectedEmail);
                                        }
                                    }).create();
                            dialog.show();
                        }
                    } catch (Exception e) {
                        Log.e("FILES", "Failed to get phone data", e);
                    }
                }
            }
        }

这将在名为editText的编辑文本中设置选定的电话号码。您可以根据需要更改此设置。

【讨论】:

  • 我喜欢在结果中简单地使用超过 1 个警报对话框 :-)
  • 我修改了您的代码以获取姓名和联系人图片,但它不起作用。有什么方法可以帮助我吗?还有什么方法可以修改以显示它旁边的数字类型?
  • 您介意帮我看看这个吗? stackoverflow.com/questions/19286637/…
【解决方案2】:

看看这两个页面:

  1. Read all contact's phone numbers in android

  2. http://developer.android.com/resources/articles/contacts.html

他们应该明确如何获取你想要的数据。

你是不是也卡在数据的显示上?

【讨论】:

  • 感谢您的回复。请查看我在问题中的编辑。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-22
  • 2011-01-22
  • 2013-02-21
相关资源
最近更新 更多