2013-10-26 58 views
0

我想要獲取android中某些給定時間段的通話記錄。爲了獲取通話記錄,我使用以下代碼 mCursor=getContentResolver().query(CallLog.Calls.CONTENT_URI,PROJECTION,mSelection,mSelectionArgs, null); 並且在這裏我將mSelectionmSelectionArgs替換爲null以獲取所有通話記錄。在一天中過濾某些給定時間段的通話記錄

現在,假設我只想從早上9點到11點的通話記錄,有可能嗎?如果是這樣,我應該在mSelectionmSelectionArgs中輸入什麼?或者,可以使用其他方式來篩選通話記錄,而不是使用某種迭代手動檢查mCursor中的每一行,然後對其進行篩選。

回答

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日:

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值得到小時。

+0

沒關係,Craigy,但我不想手動迭代和檢查遊標中的每一行以進行過濾。我想通過在'mSelection'或'mSelectionArgs'中提供一些值直接過濾日誌的方法。 –

+0

@MihirShah是有道理的。我更新了答案,這可能會或可能不會工作取決於你時間間隔。 – Craigy

相關問題