2016-09-19 14 views
0

개인적으로 사용하기 위해 서버에 로그온하기 위해 전화를해야하는 안드로이드 응용 프로그램에서 작업 중입니다. 이 목적으로 등록 된 방송 수신자를 보유하고 있으며 모든 유형의 전화와 세부 정보를 감지 할 수 있습니다. 그러나 정확한 발신 통화 시간을 감지하는 것은 불가능합니다. 즉, 정확한 통화 지속 시간이 아닌 outdoing 통화에 대한 완전한 OFFHOOK 시간을 감지 할 수 있습니다. 통화 로그 기록에서 레코드를 읽으려고 시도 할 때만 발신 통화가 끝난 경우입니다. 나가는 통화가 끝났음에도 불구하고 broadcastreceiver에서 통화 로그 기록을 읽을 수 있지만 통화 기록 항목에 현재 수신 된 통화의 항목이 표시되지 않습니다. 통화 기록에서 이전 통화를 모두 볼 수 있지만 내가 수신 한 통화는 볼 수 없습니다. 내 코드에서 here의 Gabe Sechan 예제를 사용하고 있습니다. 그리고 나는이 같은 outgoingcallended 방법에안드로이드 broadcastreceiver에서 새로운 통화 로그 레코드를 찾을 수 없음

ContentResolver crs = globalContext.getContentResolver(); 
    Cursor cr = getAllCallLogs(crs); 
    if(cr.moveToFirst()){ 
     duration = cr.getString(cr 
       .getColumnIndex(android.provider.CallLog.Calls.DURATION)); 
     callNumber = cr.getString(cr 
       .getColumnIndex(android.provider.CallLog.Calls.NUMBER)); 


    } 
    private Cursor getAllCallLogs(ContentResolver cr) { 
    // reading all data in descending order according to DATE 
    String strOrder = android.provider.CallLog.Calls.DATE + " DESC"; 
    Uri callUri = Uri.parse("content://call_log/calls"); 
    Cursor cur = cr.query(callUri, null, null, null, strOrder); 

    return cur; 
    } 

를 최근 통화 내역을 읽으려고하지만 callNumber 이전 전화 번호가 아니라 내가 broadcastreciver과 동일한 기간의 경우와받은의 하나입니다. 전화 로그를 읽으려고 할 때까지 업데이트되지 않으므로 어떻게 해결할 수 있습니까? 내가 뭘 놓치고 있니?

+0

이유는 방송을 받았을 때 동일한 레코드가 아직 DB에 업데이트되지 않는 것입니다. Praveen이 올바르게 지적한대로 지연을 추가 할 수 있지만 내용 관찰자를 추가하는 것이 좋습니다 – Ayaanp

답변

0

getContentResolver() 전에 지연을 추가해야 테이블이 업데이트됩니다. Thread.sleep()을 추가하거나 핸들러를 사용할 수 있습니다.

public void loadCursorPostDelayed(){ 
    final Handler handler = new Handler(); 
    handler.postDelayed(new Runnable() { 
     @Override 
     public void run() { 

      ContentResolver crs = globalContext.getContentResolver(); 
      ... 
     } 
    }, 1500); 
} 

}

+0

감사합니다. @Praveen은 3 초의 처리기 지연으로 작동합니다. 그러나 지연 방법은 신뢰할 수 있습니까? –

+0

지연된 방법은 장치가 매우 느릴 때까지 대부분의 경우 작동합니다. 그러나보다 구체적인 구현은 Ayaanp가 제안한 내용 관찰자를 사용할 것입니다. DB의 데이터 변경에 대한 콜백을 받게됩니다. 변경시 마지막 통화의 데이터를 확인할 수 있습니다. 확인하십시오 [이] (http://stackoverflow.com/questions/16582577/android-content-observer-onchange-method-check-if-last-call-is-missed-call-or) – Praveen

+0

그래, 좋은 소리. 감사 –