마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

주소록에 연락처를 다 가지고 오지 못합니다.

0 추천

주소록에 있는 연락처를 이용하는 앱을 개발하였는데요

테스트를 해보니 주소록에 100여명이 있는데 25명 정도만 나오네요....

제가 직접 본건 아니고 원격지에서 테스트 해주시는분이 전해준 내용입니다.

 

사용하는 폰은 겔s2입니다.

 

Uri uri = ContactsContract.CommonDataKinds.Phone.CONTENT_URI;
  String[] projection = new String[] {
    ContactsContract.CommonDataKinds.Phone._ID,
    ContactsContract.CommonDataKinds.Phone.CONTACT_ID,
    ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME,
    ContactsContract.CommonDataKinds.Phone.NUMBER};

  String selection;
  selection = ContactsContract.CommonDataKinds.Phone.TYPE
    + "="
    + (ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE | ContactsContract.CommonDataKinds.Phone.TYPE_OTHER);
  // selection = ContactsContract.CommonDataKinds.Phone._ID;

  String[] selectionArgs = null;

  String sortOrder = ContactsContract.Contacts.DISPLAY_NAME
    + " COLLATE LOCALIZED ASC";

  Cursor cursor = mCr.query(uri, projection, null, selectionArgs,
    sortOrder);

 

주소록 가져오는 부분 소스입니다.

커서 쿼리 부분에 selection 스틀링을 넣으나 null로하나 결과가 동일하네요.

저와 같은 증상 겪어 보신분들 계신가요?

타조군 (160 포인트) 님이 2013년 5월 31일 질문

3개의 답변

0 추천

일단 저는 주소록 불러오는것을 해본적이 없으나 소스상 흐름만 보고 말씀드린다는 것을 알려드리면서..

where 절 (selection)에 들어가는 구문에서

11번째 라인에 보면 주소록에서 전화번호의 유형이

모바일 또는 기타로 되어 있는 사람만 불러오게 되어 있는것 같은데요?

일반적으로 주소록에 집만 등록되어있는사람도 있을수도 있으니, 그 사람들이 제외 된게 아닐까 싶네요.

유형이 집? 모바일? 기타? 인지 확인해보시고, 그외 유형도 불러올수 있는지 확인해보세요.

 

익명사용자 님이 2013년 5월 31일 답변
쿼리에 selection 넣는 부분에 null로 처리하면 상관없이 다 가지고 오는거 아닐까요?
0 추천
간단히 ListView 형태로 전화번호부 가져오는 코드를 짜봤습니다.

저는 목록에 있는 사람들에 전화번호부를 다가져오네요.. 한번 비교해보시겠어요?

String [] projection = new String[] {
    
    Phone._ID,
    Phone.DISPLAY_NAME,
    Phone.NUMBER
  };
  
  Cursor cursor = getContentResolver().query(
    
//    uri,
    Phone.CONTENT_URI,
    projection,
    null,    
    null,
    Phone.DISPLAY_NAME);
  
  ListView list = (ListView)findViewById(R.id.list);
  MyAdapter adapter = new MyAdapter(this, cursor, true);
  list.setAdapter(adapter);
 }
 
 private class MyAdapter extends CursorAdapter {

  public MyAdapter(Context context, Cursor c, boolean autoRequery) {
   super(context, c, autoRequery);
  }

  @Override
  public void bindView(View view, Context context, Cursor cursor) {
   TextView name = (TextView)view.findViewById(R.id.name);
   TextView phone = (TextView)view.findViewById(R.id.phone);
   
   name.setText(cursor.getString(cursor.getColumnIndex(Phone.DISPLAY_NAME)));
   phone.setText(cursor.getString(cursor.getColumnIndex(Phone.NUMBER)));
  }

  @Override
  public View newView(Context context, Cursor cursor, ViewGroup parent) {
   LayoutInflater vi = LayoutInflater.from(context);
   return vi.inflate(R.layout.items, null);
  }
  
 }
안드로메다개발자 (8,830 포인트) 님이 2013년 6월 3일 답변
0 추천
자답입니다.

 

주소록에서 가져온 정보를 이용하여 SMS를 발송하는데

이때 폰 번호가 아닌 번호를 필터링 하도록 하는 함수가 있습니다.

 

맨 앞 번호를 보고 판단 하도록 했는데 간혹 국내 사용자 핸드폰 번호인데

+8210 또는 8210 으로 시작 하는 경우가 있었습니다.

이통사 특징인지 핸드폰 특징인지는 파악하지 않았는데

대부분 폰 번호가 저렇게 저장되는 사용자의 경우였습니다.

 

혹시 저와 같은 경우 겪으신 분들은 참고 하세요.
타조군 (160 포인트) 님이 2013년 6월 3일 답변
...