0

我正在嘗試根據顯示名稱搜索聯繫人。 我已經從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子句。

回答

1

嘗試這個

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

在哪裏可以使用此代碼?您是否檢查過樣本? –

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 
    ); 
}