我在听众下方检测来电 我在来电之后每次向CallLog内容提供商发出询问 即使几秒钟之前已经记录了一个呼叫,我的光标也总是返回null 顺便说一下,我在eclipse中运行项目之前清除了我的通话记录 我希望能够在来电之后每次将我的光标指向第一行,但它只是不起作用
// 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 :(得分:3)
我类似地从通话后的日志中读取呼叫并遇到一些问题,但有一个有效的解决方案。有两件事需要考虑:
1)使用常量
时,我在某些设备上遇到了问题CallLog.Calls.CONTENT_URI
请尝试直接使用URI字符串:
Uri.parse("content://call_log/calls")
2)在呼叫结束后,您正在快速读取呼叫记录,请在监听器中休眠1000毫秒,以便在查询之前更新呼叫记录。
答案 1 :(得分:0)
尝试使用本地Cursor变量, 〜。〜然后确保查询不返回null~.~