日付範囲に基づいて結果を自分でフィルタリングすることができます。
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
フィルター条件が単純な場合 (たとえば、2 回の間に通話が必要な場合)、指定された範囲の日付のみを返すクエリを作成できます。たとえば、今年の 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
句を使用するかlong
、SQL の値から時間を取得する方法を理解する必要があります。