过滤一天中某个给定时段的通话记录

时间:2013-10-26 17:07:37

标签: android

我想获取android中某些给定时间段的通话记录。要获取通话记录,我使用以下代码 mCursor=getContentResolver().query(CallLog.Calls.CONTENT_URI,PROJECTION,mSelection,mSelectionArgs, null); 在这里,我将mSelectionmSelectionArgs替换为null以获取所有通话记录。

现在,假设我只想在早上9到11之间调用日志,是否可能?如果是这样,我应该在mSelectionmSelectionArgs中添加什么内容?或者,任何其他方式来过滤调用日志,而不是使用一些迭代手动检查mCursor中的每一行,然后过滤它。

1 个答案:

答案 0 :(得分:2)

您可以根据日期范围自行过滤结果。

int date = mCursor.getColumnIndex(CallLog.Calls.DATE);

while (mCursor.moveToNext()) {
    String callDate = mCursor.getString(date);
    Date callDayTime = new Date(Long.valueOf(callDate));

    // filter by date

如果您的过滤条件足够简单(例如,您希望在两次之间调用),则可以形成仅返回该给定范围内的日期的查询。例如,要从今年10月12日中午到晚上7点接听所有电话:

Calendar cal = Calendar.getInstance();
cal.set(2013, Calendar.OCTOBER, 12, 12, 0, 0);
Date afterDate = cal.getTime();
cal.set(2013, Calendar.OCTOBER, 12, 19, 0, 0);
Date beforeDate = cal.getTime();

final String SELECT = CallLog.Calls.DATE + ">?" + " AND "
        + CallLog.Calls.DATE + "<?";

Cursor managedCursor = getContentResolver().query(
        CallLog.Calls.CONTENT_URI,
        new String[] { CallLog.Calls.DATE, CallLog.Calls.DURATION,
                CallLog.Calls.TYPE, CallLog.Calls.NUMBER,
                CallLog.Calls._ID },
        SELECT,
        new String[] { String.valueOf(afterDate.getTime()),
                String.valueOf(beforeDate.getTime()) },
        CallLog.Calls.DATE + " desc");

如果你想在中午和晚上7点之间过滤掉电话而不管白天,我认为第一个循环是你最好的选择(你需要使用一个大的SELECT条款或弄清楚如何获得小时来自SQL中的long值。