首页 > 解决方案 > 如何将应用使用统计信息存储在文本文件中?

问题描述

我正在开发一个应用程序,它将提供安装在我手机上的使用统计信息,但我想将这些统计信息(即应用程序打开的时间和时间等)存储在一个文件中,而不是仅仅显示在屏幕上.

我希望应用程序在后台运行并将应用程序使用情况保存在文本文件中

标签: javaandroiddata-storage

解决方案


我也提供和你一样的东西,但对我来说它是家长控制应用程序。所以我展示了用于存储应用程序历史记录的方法。

    private void history(AccessibilityEvent event) {
    SharedPreferences sf = getSharedPreferences("TempApp", MODE_PRIVATE);
    SharedPreferences.Editor editor = sf.edit();

        Log.i("eventSource", event.getPackageName().toString());
        try {
            appName = getPackageManager().getApplicationLabel(getPackageManager().getApplicationInfo(event.getPackageName().toString(), PackageManager.GET_META_DATA)).toString();
            Log.i("CurrentApplication", appName);
        } catch (PackageManager.NameNotFoundException e) {
            e.printStackTrace();
        }
        String tempApp = sf.getString("appName", "");
        if (tempApp.equals(appName)) {
            Log.i("Current", "inside if ");
        } else {
            editor.putString("appName", appName).apply();
            Calendar cl = Calendar.getInstance();
            String time, hour, minute, second;
             hour = (cl.get(Calendar.HOUR) < 10) ? "0" + cl.get(Calendar.HOUR) : ""+ cl.get(Calendar.HOUR);
             minute = (cl.get(Calendar.MINUTE) < 10) ? "0" + cl.get(Calendar.MINUTE) : ""+ cl.get(Calendar.MINUTE);
             second = (cl.get(Calendar.SECOND) < 10) ? "0" + cl.get(Calendar.SECOND) : ""+ cl.get(Calendar.SECOND);
             time = hour + ":" + minute + ":" + second;
            if (cl.get(Calendar.AM_PM) == 0)
                time += " AM";
            else
                time += " PM";
            int timeStart= cl.get(Calendar.HOUR_OF_DAY)*60*60+cl.get(Calendar.MINUTE)*60+cl.get(Calendar.SECOND);
            editor.putInt("nowTime",timeStart).apply();
            HistoryDB hDB = new HistoryDB(getApplicationContext());
            hDB.insertData(appName);
            hDB.update(tempApp, "EndTime", time);
            int timeUsed=sf.getInt("nowTime",0)-sf.getInt("prevTime",0);
            hDB.update(tempApp, "TimeUsed",String.valueOf(timeUsed));
            hDB.update(appName, "StartTime", time);
            editor.putInt("prevTime",timeStart).apply();
        }
    }

历史.java

public class HistoryDB  extends SQLiteOpenHelper {
private static String DB_NAME = "History.db";
private static int DB_VR = 1;
private static String DB_TABLE = "HistoryData";
private static SQLiteDatabase dbb;
public HistoryDB(Context context) {
    super(context, DB_NAME, null, DB_VR);
}

@Override
public void onCreate(SQLiteDatabase db) {
    db.execSQL("create table  " +DB_TABLE + "(AppName text,StartTime text ,EndTime text,TimeUsed Integer);");
}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

}
void insertData(String appName)
{
    dbb = getWritableDatabase();
    dbb.execSQL("insert into "+ DB_TABLE + "(AppName,StartTime,EndTime,TimeUsed) values('"+appName+"',' ','                  ',0);");
    dbb.close();
}

 void update(String appName, String colName, String time) {
    dbb = getWritableDatabase();
    dbb.execSQL("update "+DB_TABLE+" set "+colName+"='"+time+"' where AppName='"+appName+"'");
    dbb.close();
}

 ArrayList<String> getData(String colName)
{
    dbb=getReadableDatabase();
    Cursor cr=dbb.rawQuery("select "+colName+" from "+DB_TABLE,null);
    ArrayList<String> arrayList=new ArrayList<>();
    while(cr.moveToNext()){
        arrayList.add(cr.getString(0));
    }
    dbb.close();
    cr.close();
    return arrayList;
}

}


推荐阅读