2013-08-02 226 views
3

我有一个听众低于检测来电
我做一个查询到CallLog内容提供商每次后来电
我的光标总是返回null即使已经有通话记录的几秒钟前
顺便说一句,我清除我的通话记录运行
我希望能够来电后,在第一行的每个指向我的光标在Eclipse项目之前,但它只是不工作
为什么我的游标返回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

我同样从日志后通话中读取呼叫,并遇到一些问题,但有一个工作解决方案。有需要考虑两件事情:

1)我使用常量

CallLog.Calls.CONTENT_URI 

时,对一些设备的麻烦尝试使用URI字符串,而不是直接:

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

2)你正在阅读通话结束后通话记录速度过快,请让您的听众休眠1000毫秒,以便在查询通话记录之前更新通话记录。

+0

非常感谢!有效! :D – Marss

+0

它是内容URI吗? – Guykun

+0

我做了1&2:D – Marss

0

尝试使用本地游标变量, 〜。然后是sur e查询不返回空〜〜

+0

日志中的光标仍然返回0 – Marss