0

Androidで特定のタイムスロットの通話ログを取得したい. 通話ログを取得するには、次のコードを使用します 。ここでは、すべての通話ログを取得するためにとmCursor=getContentResolver().query(CallLog.Calls.CONTENT_URI,PROJECTION,mSelection,mSelectionArgs, null); を置き換えました。mSelectionmSelectionArgsnull

さて、朝の 9 時から 11 時までの通話記録だけが欲しいとしますが、可能でしょうか? もしそうなら、私は何を入れるべきmSelectionですmSelectionArgsか?または、いくつかの反復を使用して mCursor からすべての行を手動でチェックしてからフィルター処理する代わりに、呼び出しログをフィルター処理する他の方法。

4

1 に答える 1

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

フィルター条件が単純な場合 (たとえば、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 の値から時間を取得する方法を理解する必要があります。

于 2013-10-26T17:17:09.403 に答える