Android - 显示特定时间范围内的 SQLite 数据库查询

Android - Display SQLite database query in a specific timeframe

我正在开发一个应用程序来跟踪 phone 使用时间。 问题是,我需要在一天内显示时间使用情况。 例如,我需要从数据库中显示我的应用程序仅从 12.00 am - 11.59 pm 使用的时间 并且需要在第二天重新设置时间。

这是我的代码:

 public void onCreate(SQLiteDatabase db) {
    String CREATE_APPTIME_TABLE = "CREATE TABLE app_time (" +
            "id INTEGER PRIMARY KEY AUTOINCREMENT, " +
            "packageName TEXT UNIQUE," +
            "appName TEXT," +
            "elapsedTime INTEGER )";

这是检索时间的查询

public List<AppTime> getAllAppTime() {
    List<AppTime> appTimes = new LinkedList<AppTime>();

    // build query
    String query = "SELECT * FROM " + TABLE_APPTIME + " WHERE " + KEY_TIME + " > 0";

    // get reference to writable DB
    SQLiteDatabase db = this.getWritableDatabase();
    Cursor cursor = db.rawQuery(query, null);

我需要显示每天从 12.00 a.m 到晚上 11.59 的 elapsedTime,并在第二天重置时间。

谢谢。 :)

我有两种建议

  1. 如果您准备好修改 app_time table,您可以添加一个日期列来记录这一天。在这种情况下,您可以向用户显示基于日期的历史记录。您的查询将需要有一个日期过滤器,并且不需要重置数据库。 (您可能仍想删除超过 60 天的条目,只是为了将数据库大小控制在限制范围内)

table可以修改如下

public void onCreate(SQLiteDatabase db) {
    String CREATE_APPTIME_TABLE = "CREATE TABLE app_time (" +
        "id INTEGER PRIMARY KEY AUTOINCREMENT, " +
        "packageName TEXT UNIQUE," +
        "appName TEXT," +
        "elapsedTime INTEGER, " + 
        "dateCol VARCHAR(50) )";

添加这两个方法

public static String getCurrentDate() {
    SimpleDateFormat dateFormat = new SimpleDateFormat(
            "yyyy-MM-dd", Locale.getDefault());
    Calendar cal = Calendar.getInstance();
    return dateFormat.format(cal.getTime());
}

public static String getDateFor(int date, int month, int year) {
    SimpleDateFormat dateFormat = new SimpleDateFormat(
            "yyyy-MM-dd", Locale.getDefault());
    Calendar cal = Calendar.getInstance();
    cal.set(Calendar.DATE, date);
    cal.set(Calendar.MONTH, month); // month starts from 0
    cal.set(Calendar.YEAR, year);
    return dateFormat.format(cal.getTime());
}

然后在您的查询中,您可以像这样访问特定日期的行

// build query
String query = "SELECT * FROM " + TABLE_APPTIME + " WHERE dateCol = '" + getCurrentDate() + "'";
  1. 您可以使用每天在 12:00AM 执行的 AlarmManager,您可以在其中执行服务以重置计时器。 AlarmManager