Android:我试图根据显示名称搜索联系人

问题描述:

我正在尝试根据显示名称搜索联系人。 我已经从Android开发人员网站上给出的示例代码参考。Android:我试图根据显示名称搜索联系人

https://developer.android.com/training/contacts-provider/retrieve-names.html

在此示例中,搜索执行从整个联系人的详细信息存在于接触不仅从联系人名称。

例如,如果用户在他的联系人中有一个电子邮件地址,那么搜索也会在匹配电子邮件时执行。 或者如果一个号码存储在家庭类型中,则在键入h时,家庭类别中存在的号码也显示出来。

我希望搜索被限制为其显示名称。

 final static String SELECTION = 
      (Utils.hasHoneycomb() ? Contacts.DISPLAY_NAME_PRIMARY : Contacts.DISPLAY_NAME) + 
        "<>''" + " AND " + Contacts.IN_VISIBLE_GROUP + "=1"; 

这是我从示例代码中使用的selecton子句。

尝试这个

Cursor cursor = getContentResolver().query(
      android.provider.ContactsContract.Contacts.CONTENT_URI, 
      new String[] { ContactsContract.Contacts.PHOTO_ID, 
        ContactsContract.Contacts.DISPLAY_NAME, 
        ContactsContract.Contacts._ID }, 
      ContactsContract.Contacts.HAS_PHONE_NUMBER, null, 
      ContactsContract.Contacts.DISPLAY_NAME); 

cursor给出任何电话号码,然后我保存独特IDArrayList这样

cursor.moveToFirst(); 

    while (cursor.moveToNext()) { 
     contactsID.add(cursor.getString(2)); 
    } 

然后选择联系人时我找到的所有联系人使用此联系人号码

Cursor cursor = getContentResolver() 
        .query(android.provider.ContactsContract.CommonDataKinds.Phone.CONTENT_URI, 
          new String[] { 
            ContactsContract.CommonDataKinds.Phone.NUMBER, 
            ContactsContract.CommonDataKinds.Phone.CONTACT_ID, 
            ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME }, 
          ContactsContract.CommonDataKinds.Phone.CONTACT_ID 
            + " = ?", 
          new String[] { contactsID.get(position) }, null); 
      contactNumbers = new ArrayList<String>(); 
      while (cursor.moveToNext()) { 
       contactNumbers.add(cursor.getString(0)); 
       Log.d("number", cursor.getString(0)); 
      } 
+0

在哪里可以使用此代码?您是否检查过样本? –

,做在Retrieving a List of Contacts教程滤波的代码是在这里:

Uri contentUri = Uri.withAppendedPath(Contacts.CONTENT_FILTER_URI, Uri.encode(mSearchString)); 

Contacts.CONTENT_FILTER_URI文档它说:

的过滤字符串将被用来接触 的匹配各个部分名称

所以这对你并不好,把它换成:

@Override 
public Loader<Cursor> onCreateLoader(int loaderId, Bundle args) { 
    Uri contentUri = Contacts.CONTENT_URI; // no longer filters 
    String selection = Contacts.DISPLAY_NAME_PRIMARY + " LIKE %" + mSearchString + "%"; 

    return new CursorLoader(
      getActivity(), 
      contentUri, 
      PROJECTION, 
      selection, 
      null, 
      null 
    ); 
}