从具有两个以上联系号码的联系人中仅选择一个号码

Posted

技术标签:

【中文标题】从具有两个以上联系号码的联系人中仅选择一个号码【英文标题】:Selecting only one number from a contact which is having more than two contact numbers 【发布时间】:2013-02-07 15:31:43 【问题描述】:

我可以使用以下代码从联系人中检索联系人姓名和号码。我的问题是,当一个联系人有多个号码时,它会以某种方式选择其中一个,这是我不想要的。

如果一个联系人有多个电话号码,我需要用户能够选择他想要选择的电话号码。

这是我的代码。

private void pickContacts() 
                // TODO Auto-generated method stub
                Intent it = new Intent(Intent.ACTION_PICK,ContactsContract.Contacts.CONTENT_URI);           
                startActivityForResult(it,1);
            

在onActivityResult(int requestCode,int resultCode,Intent data)中

if(requestCode==1)
        Uri contactData = data.getData();
        Cursor c = managedQuery(contactData, null, null, null, null);
        if (c.moveToFirst()) 
                               
            String id = c.getString(
                    c.getColumnIndex(ContactsContract.Contacts._ID));
             name = c.getString(c.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
            localEditor.putString("contactName", name);
            tv2.setText(name);      
            int hasPhone=c.getInt(c.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER));
            if(hasPhone==1)
                 Cursor pCur = getContentResolver().query(
                         ContactsContract.CommonDataKinds.Phone.CONTENT_URI, 
                         null, 
                         ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = ?", 
                         new String[]id, null);
                                while(pCur.moveToNext())

                                     number =pCur.getString(pCur.getColumnIndex(
                                            ContactsContract.CommonDataKinds.Phone.NUMBER));
                                //  Toast.makeText(getApplicationContext(), number, Toast.LENGTH_LONG).show();

                                    localEditor.putString("contactNumber", number);

                                tv3.setText(number);

                                
                                pCur.close();
            
        while(c.moveToNext());




        localEditor.commit();
      //  tv2.setText(name);     
     //   tv3.setText(number);
    super.onActivityResult(requestCode, resultCode, data);

提前感谢您的帮助..

【问题讨论】:

请点击以下链接,这将有助于您的方案 [***.com/questions/6171328/… [1]: ***.com/questions/6171328/… 这个问题已经在这里回答了***.com/questions/9798639/… 【参考方案1】:

Cursor 有一个名为getCount 的方法,它返回游标中的行数。您可以使用它来确定是否有多个数字并列出它们以选择一个。

试试这个...

if (c.getInt(c.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0) 
    Cursor pCur = getContentResolver().query(
        ContactsContract.CommonDataKinds.Phone.CONTENT_URI, 
        null, 
        ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = ?", 
        new String[]id, null);
    if(pCur.getCount() > 1) 
        int i=0;
        String[] phoneNum = new String[pCur.getCount()];
        while (pCur.moveToNext()) 
            // store the numbers in an array
            phoneNum[i] = pCur.getString(pCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
            i++;
        
        // list the phoneNum array (perhaps using radiobuttons) & give the choice to select one number      
     else 
        // do what you are doing now
        // while (pCur.moveToNext()) 
        //     
    
    pCur.close();

希望这会有所帮助。

【讨论】:

没有看到上面关于已经回答的问题的cmets!尽管如此,还是会保持原样...... ***.com/questions/15038975/…【参考方案2】:
fun pickContact() 
                val intent = Intent(Intent.ACTION_PICK, ContactsContract.CommonDataKinds.Phone.CONTENT_TYPE);           
                startActivityForResult(intent, REQUEST_CODE_CONTACT);
            

使用ContactsContract.CommonDataKinds.Phone.CONTENT_TYPE 启动android 联系人选择器,它将允许用户为每个联系人拍照。

【讨论】:

以上是关于从具有两个以上联系号码的联系人中仅选择一个号码的主要内容,如果未能解决你的问题,请参考以下文章

使用联系人选择器时从具有多个号码的用户中选择一个号码

从多个联系人号码列表中选择一个联系人号码

通过具有多个电话号码的意图添加新联系人

从联系人选择器中获取号码

从联系人列表中选择多个号码

从手机读取联系人非常慢