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

Call log 쿼리 관련 질문입니다.

0 추천
Cursor managedCursor = getContentResolver().query(CallLog.Calls.CONTENT_URI, null, CallLog.Calls.NUMBER + "= ?",  new String[]{ String.valueOf(pNumber)}, null);
 
전화번호 기준으로 쿼리하는걸 구현 했는데요,
제가 하고싶은데 이 전화번호 중에서 type이 missed_call이면 제외 시키고 싶은데 2중 쿼리를 써야하는건가요??
 
한마디로 incoming과 outgoing call만 쿼리하고싶습니다.
 
도움 부탁드려요
발삼체다 (650 포인트) 님이 2015년 2월 5일 질문

1개의 답변

+1 추천
Cursor managedCursor = getContentResolver().query(CallLog.Calls.CONTENT_URI, null, CallLog.Calls.NUMBER + "= ? and type <> 'missed' ",  new String[]{ String.valueOf(pNumber)}, null);

not 이 != 인지 <>인지는 기억이 잘 안나네요 ;;;

그리고 missed에 해당하는 어떤 값이 있을테니 그걸 찾아서 넣으면 됩니다 

쎄미 (162,410 포인트) 님이 2015년 2월 5일 답변
쎄미님 덕분에 막힘 없이 잘 진행하고 있습니다. 사랑합니다.
아참, 그리고 and부터 소문자인가요 대문자인가요?
대소문자 상관없어요. 보통은 SQL 구문용으로 쓸 때에는 대문자로 하는데 저는 귀찮아서 다 소문자로 써요
missed에 해당하는 값은
MISSED_TYPE 인가요 아니면 Calls.MISSED_TYPE 인가요?
쎄미님 도움을 얻어 자답 하나 하겠습니다. missed_type은 상수값으로 3입니다.
고로
Cursor managedCursor = getContentResolver().query(CallLog.Calls.CONTENT_URI, null, CallLog.Calls.NUMBER + "= ? AND TYPE <> 3 ",  new String[]{ String.valueOf(pNumber)}, null);

으로 하면 됩니다.

그리고 참고로 발신시 취소된 전화는 type지정이 안되어 있으므로

Cursor managedCursor = getContentResolver().query(CallLog.Calls.CONTENT_URI, null, CallLog.Calls.NUMBER + "= ? AND TYPE <> 3 AND DURATION <> 0",
                        new String[]{ String.valueOf(pNumber)}, null);

Duration이 0인 전화를 제외하면 실제로 통화한 목록에 대해서만 쿼리합니다.

쎄미님 감사~
나중을 위해 <> 3" 대신에 <>"+CallLog.Calls.MISSED_TYPE 가 더 나을 것 같아요
...