2013-08-02 9 views
3

나는 내가 모든 전화가
BTW 단 몇 초 전에 로그인 이미 경우에도
내 커서는 항상 null를 돌려 걸려 오는 전화 후 CallLog 컨텐츠 제공자에게 질의를하게 걸려 오는 전화
를 감지하는 리스너 아래에 있습니다 내가 걸려 오는 전화 후 첫 번째 행마다 나의 커서를 할 수 있도록하려는
이클립스에서 프로젝트를 실행하기 전에 내 통화 기록을 삭제하지만, 그것은 단지
커서가 null을 반환하는 이유는 무엇입니까?

// Listener to detect incoming calls. 

private class CallStateListener extends PhoneStateListener { 

    @Override 
    public void onCallStateChanged(int state, String incomingNumber) { 

     if (previousState == TelephonyManager.CALL_STATE_RINGING 
       && state == TelephonyManager.CALL_STATE_IDLE) { 

      cursor = context.getContentResolver().query(
        CallLog.Calls.CONTENT_URI, projection, null, null, 
        Calls.DEFAULT_SORT_ORDER); 

      Log.i("SIZE OF CURSOR", String.valueOf(cursor.getCount())); 

      if (cursor.moveToFirst()) { 

      }// end if 
     }// end if 

     Log.i("onCallStateChanged", 
       String.format("State changed to %d", state)); 

     previousState = state; 

    }// end onCallStateChanged() 
}// end CallStateListener class 

Cursor cursor; 
private String[] projection = new String[] { Calls.TYPE, Calls.NUMBER }; 
+0

사용자가받는 모든 수신 전화. 통화에 응답하든 부재 중 전화를 건든 수신 전화가 올 때마다 CallLog 컨텐트 프로 바이더에 쿼리를합니다. – Marss

답변

3

마찬가지로 로그 포스트 콜에서 호출을 읽었으며 몇 가지 문제가 발생했지만 해결 방법이 있습니다. 고려해야 할 두 가지가 있습니다 상수

CallLog.Calls.CONTENT_URI 

을 사용할 때 일부 장치에 문제가 있었다

1) 직접 대신 URI 문자열을 사용하십시오 : 당신이 읽고있는

Uri.parse("content://call_log/calls") 

2) 통화가 끝난 후 통화 기록이 너무 빠르면 통화 기록을 업데이트하기 전에 Listener를 1000ms 동안 잠자 게하십시오.

+0

정말 고마워요! 그것은 효과가있다! : D – Marss

+0

콘텐츠 URI였습니까? – Guykun

+0

나는 1 & 2를 모두했다 : D – Marss

0

지역 커서 변수를 사용하려고 작동하지 않습니다 , ~. ~ then be sur e 쿼리는 null을 반환하지 않습니다. ~

+0

로그는 로그에서 여전히 0을 반환합니다 – Marss

관련 문제