如何从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中的联系人中搜索号码?的主要内容,如果未能解决你的问题,请参考以下文章