0

표시 이름을 기준으로 연락처를 검색하려고합니다. 안드로이드 개발자 사이트에서 제공하는 샘플 코드에서 참조를 가져 왔습니다. 이 샘플에서 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는 모든 전화 번호가 다음 내가 찾아 연락처를 선택에 다음이

cursor.moveToFirst(); 

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

같은 ArrayList에 고유 ID을 저장 모든 연락처를 제공하십시오 이 번호를 사용하는 연락처는

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 튜토리얼의 필터링을 수행하는 코드는 여기에 다음 Contacts.CONTENT_FILTER_URI 문서에서

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

는 말한다 :

필터 문자열 다양한 부분을 접촉 의 일치하는 데 사용됩니다 이름

이렇게 좋지 않으므로 다음으로 바꾸십시오.

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