Android startActivityForResult一个联系人的所有电话号码

Android startActivityForResult一个联系人的所有电话号码,android,Android,联系人可能有许多电话号码(手机、家庭等)。我想让用户能够选择一个特定联系人的电话号码 通过这段代码,我得到了每个联系人的所有电话号码列表 Intent intent = new Intent(Intent.ACTION_PICK, ContactsContract.CommonDataKinds.Phone.CONTENT_URI); startActivityForResult(intent, PHONE_NUMBER_PICKED); 如何仅列出一个联系人的电话号码 编辑:我知道

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

通过这段代码,我得到了每个联系人的所有电话号码列表

Intent intent = new Intent(Intent.ACTION_PICK, 
    ContactsContract.CommonDataKinds.Phone.CONTENT_URI);
startActivityForResult(intent, PHONE_NUMBER_PICKED);
如何仅列出一个联系人的电话号码


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

看看这两页:

  • 他们应该明确如何获得你想要的数据


    您是否也无法显示数据?

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

    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);
                        }
                    }
                }
            }
    
    if(requestCode==选择联系人){
    if(resultCode==Activity.RESULT\u确定){
    如果(数据!=null){
    Uri contactData=data.getData();
    试一试{
    字符串id=contactData.getLastPathSegment();
    游标phoneCur=getContentResolver()
    .query(contacts contract.commondatatypes.Phone.CONTENT\u URI、,
    无效的
    Contacts contract.CommonDataTypes.Phone.CONTACT\u ID
    +“=?”,新字符串[]{id},
    无效);
    final ArrayList phonesList=新ArrayList();
    while(phoneCur.moveToNext()){
    //这将允许您获得多个电话地址
    //如果电话地址存储在阵列中
    字符串phone=phoneCur
    .getString(phoneCur)
    .getColumnIndex(ContactsContract.CommonDataTypes.Phone.DATA));
    电话列表。添加(电话);
    }
    phoneCur.close();
    如果(phonesList.size()==0){
    助手。展示吐司(
    这
    getString(R.string.error\u no\u phone\u no\u in\u contact),
    吐司长度(长);
    }else if(phonesList.size()==1){
    editText.setText(phonesList.get(0));
    }否则{
    最终字符串[]phonesArr=新字符串[phonesList]
    .size()];
    对于(int i=0;i

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

    谢谢您的回复。请看我在问题中的编辑。请在问题中具体说明。在你的“编辑”中,你自相矛盾。你能告诉我“一个联系人的所有电话号码”和“一个联系人的电话号码”的区别吗?对不起,如果不清楚的话。对我来说都一样。我想过滤ContactsContract.CommonDataTypes.Phone.CONTENT_URI提供的列表,以便显示的列表仅包含附加到给定联系人的电话号码。我喜欢在结果中简单地使用警报对话框来获得多个联系人:-)我修改了您的代码以获得姓名和联系人图片,但它不起作用。有什么办法帮我吗?还有什么方法可以修改以显示它旁边的数字类型?你介意帮我看一下吗?