如何从android中的联系人中搜索号码?

Posted

技术标签:

【中文标题】如何从android中的联系人中搜索号码?【英文标题】:How to search number from contacts in android? 【发布时间】:2014-03-30 14:14:04 【问题描述】:

我正在开发一个应用程序,我必须从联系人中搜索号码并将该联系人添加到我的编辑文本中。我写了一些代码发送给联系人,但没有添加编辑文本,请告诉我代码中的任何错误

我的代码

  searchBtn.setOnClickListener(new OnClickListener() 
        @Override
        public void onClick(View v) 
            Intent intent = new Intent(Intent.ACTION_GET_CONTENT);

            intent.setType(ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE);
            startActivityForResult(intent,1);
        
    );

     @Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) 
    super.onActivityResult(requestCode, resultCode, data);

    if(requestCode == RESULT_OK)
         Uri contactData = data.getData();
         Cursor cursor = managedQuery(contactData, null, null, null, null);
         cursor.moveToFirst();
         String number = cursor.getString(cursor.getColumnIndexOrThrow
                 (ContactsContract.CommonDataKinds.Phone.NUMBER));

        //contactName.setText(name);
        ephoneNumber.setText(number);
        //contactEmail.setText(email);
    

【问题讨论】:

你写的代码是一个联系人选择器。这会将您带到联系人应用程序,并允许您选择可以在您的应用程序中使用的联系人 它不搜索任何号码。清楚地解释你想要达到的目标 每当我点击搜索按钮时,它都会转到我手机中的联系人 在将文本设置为 ephoneNumber 之前,您是否正在获取字符串“number”的内容??..尝试将日志放在那里并检查。 好的。所以,你想要的是在你的联系人中搜索一个特定的号码并显示这个名字。然后@AbdEl-Rahman 给出的答案应该可以解决。 【参考方案1】:

您可以使用ContentResolver 来执行此操作。调用该方法获取contact名称:

public String getContactDisplayNameByNumber(String number) 
Uri uri = Uri.withAppendedPath(ContactsContract.PhoneLookup.CONTENT_FILTER_URI, Uri.encode(number));
String name = "?";

ContentResolver contentResolver = getContentResolver();
Cursor contactLookup = contentResolver.query(uri, new String[] BaseColumns._ID,
        ContactsContract.PhoneLookup.DISPLAY_NAME , null, null, null);

try 
    if (contactLookup != null && contactLookup.getCount() > 0) 
        contactLookup.moveToNext();
        name = contactLookup.getString(contactLookup.getColumnIndex(ContactsContract.Data.DISPLAY_NAME));
        //String contactId = contactLookup.getString(contactLookup.getColumnIndex(BaseColumns._ID));
    
 finally 
    if (contactLookup != null) 
        contactLookup.close();
    


return name;

此方法将从联系人列表中返回所需号码的名称。代码参考是这个question

【讨论】:

没问题,当代码进入检索名字的scoop时,s means that your number is exist in the contacts`。然后做任何你想做的动作。我假设你知道如何做这个小修改:) @Durga 我不明白如何从搜索按钮调用 调用该方法并将数字作为输入并使其在行后返回 True (name = contactLookup....) 如何获取该参数 您可以使用EditText从用户那里获取它作为输入,并在通过editText.getText().toString()点击button后获取它的输入【参考方案2】:

您可以同时获取姓名或号码

// fetch contact name from phone directory
    public String fetchNamePhone(String number)

        String numberName= null;

        /// number is the phone number
        Uri lookupUri =     Uri.withAppendedPath(PhoneLookup.CONTENT_FILTER_URI,Uri.encode(number));

        String[] mPhoneNumberProjection =  PhoneLookup._ID, PhoneLookup.NUMBER, PhoneLookup.DISPLAY_NAME ;                                                                                  

        Cursor c = getContentResolver().query(lookupUri, mPhoneNumberProjection, null, null,null);

        try 
            if(c.moveToFirst())

                 return number;
                // numberName =      c.getString(c.getColumnIndexOrThrow(ContactsContract.Contacts.DISPLAY_NAME)); 
            
           else
              number = "";
           
         catch (Exception e) 
            // TODO: handle exception
        

        return number;
    

调用此函数后,您将检查 number.length 如果大于 1 则 number 可用,否则 number 不可用

【讨论】:

以上是关于如何从android中的联系人中搜索号码?的主要内容,如果未能解决你的问题,请参考以下文章

如何从android中的json对象呈现和选择联系人?

如何从android中的联系人姓名获取联系人的号码

如何仅使用他们的电话号码获取联系人姓名?

如何使用部分电话号码在android中搜索联系人

从android中的指定组获取联系人

如何从android中的给定电话号码获取电话号码类型标签